2017-04-12 38 views
-2

這是我在holder.cart代碼我設置onclick函數來獲取彈出菜單中,但我得到空指針異常的線路如何在回收卡片視圖中將物品點擊放置在物品上?

PopupMenu popup = new PopupMenu(mContext, view); 
showPopupMenu(holder.cart); 

任何一個可以解決這個問題上點擊holder.cart我應該顯示彈出菜單的佈局,但在這裏我使用了menuinflater,我想將其更改爲佈局inflater並顯示彈出視圖。

import android.content.Context; 
import android.support.v7.widget.PopupMenu; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.graphics.Typeface; 
import android.view.MenuInflater; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.EditText; 
import android.widget.ImageButton; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.util.ArrayList; 


public class RecyclerAdapterProducts extends RecyclerView.Adapter<RecyclerAdapterProducts.ViewHolder> { 
    //ArrayList<Products> products; 
    OnItemClickListener clickListener; 
    ArrayList<ImageAndName> imageAndNames; 
    private Context mContext; 
    //byte[] imz; 

    public RecyclerAdapterProducts(ArrayList<ImageAndName> imageAndNames){ 
     this.imageAndNames=imageAndNames; 
     //this.discounts=discounts; 
    } 

    /*public SimpleRecyclerAdapter(ArrayList<Products> products){ 
     this.products=products; 
    }*/ 

    class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     // each data item is just a string in this case 
     /*public TextView name,offer; 
     public TextView price;*/ 
     public ImageView im; 
     public TextView name; 
     public TextView part; 
     public ImageButton cart; 
     public int position; 

     public ViewHolder(View v) { 
      super(v); 
      name = (TextView)v.findViewById(R.id.code); 
      part = (TextView)v.findViewById(R.id.textView11); 
      part.setTypeface(null, Typeface.BOLD_ITALIC); 
      im = (ImageView)v.findViewById(R.id.productImg); 
      v.setOnClickListener(this); 
      cart = (ImageButton)v.findViewById(R.id.imageView2); 

      /*cart.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
*/ 
        /*// LayoutInflater inflater = LayoutInflater.from(RecyclerAdapterProducts.this); 
        View popupView = LayoutInflater.from(mContext).inflate(R.layout.quantityalertdialog, null); 
        final EditText subEditText = (EditText)popupView.findViewById(R.id.dialogEditText); 

        AlertDialog.Builder builder = new AlertDialog.Builder(mContext); 
     *//*builder.setTitle("AlertDialog"); 
     builder.setMessage("AlertDialog Message");*//* 
        builder.setView(popupView); 
        AlertDialog alertDialog = builder.create(); 

        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.dismiss(); 
         } 
        }); 

        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.dismiss(); 
         } 
        }); 

        builder.show();*/ 

        //View popupView = LayoutInflater.from(mContext).inflate(R.layout.quantityalertdialog, null); 
      /* } 
      });*/ 
      //price = (TextView)v.findViewById(R.id.serviceDate); 

      //offer=(TextView)v.findViewById(R.id.offer); 

     } 



     @Override 
     public void onClick(View v) { 
      clickListener.onItemClick(v, getAdapterPosition()); 
     } 
    } 

    public RecyclerAdapterProducts(Context mContext, ArrayList<ImageAndName> imageAndNames) { 
     this.mContext = mContext; 
     this.imageAndNames = imageAndNames; 
    } 
    @Override 
    public RecyclerAdapterProducts.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.recycler_card_individual_product, parent, false); 
     ViewHolder vh = new ViewHolder(v); 
     return vh; 
    } 

    @Override 
    public void onBindViewHolder(final RecyclerAdapterProducts.ViewHolder holder,int position) { 
     holder.im.setImageResource(imageAndNames.get(position).getIconImageResource()); 
     holder.name.setText(imageAndNames.get(position).getName()); 
     holder.part.setText(imageAndNames.get(position).getPartno()); 
     holder.cart.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       showPopupMenu(holder.cart); 
      } 
     }); 
     holder.position=position; 

    } 

    private void showPopupMenu(View view) { 
     // inflate menu 
     PopupMenu popup = new PopupMenu(mContext, view); 
     MenuInflater inflater = popup.getMenuInflater(); 
     inflater.inflate(R.menu.menu_album, popup.getMenu()); 
     popup.setOnMenuItemClickListener(new MyMenuItemClickListener()); 
     popup.show(); 
    } 

    class MyMenuItemClickListener implements PopupMenu.OnMenuItemClickListener { 

     public MyMenuItemClickListener() { 
     } 

     @Override 
     public boolean onMenuItemClick(MenuItem menuItem) { 
      switch (menuItem.getItemId()) { 
       case R.id.action_add_favourite: 
        Toast.makeText(mContext, "Add to Wishlist", Toast.LENGTH_SHORT).show(); 
        return true; 
       case R.id.action_play_next: 
        //Toast.makeText(mContext, "Play next", Toast.LENGTH_SHORT).show(); 
        return true; 
       default: 
      } 
      return false; 
     } 
    } 
     /*final Products pd= products.get(position); 
     if (discounts!=null && discounts.size()>0) { 
      for (int i = 0; i < discounts.size(); i++) { 
       if (pd.getId().equals(((ArrayList)discounts.get(i)).get(0))){ 
        ArrayList disc=(ArrayList)discounts.get(i); 
        holder.offer.setVisibility(View.VISIBLE); 
        holder.offer.setText("Buy "+disc.get(1)+" to get "+disc.get(2)+"% discount"); 
       } 
       else { 
        holder.offer.setVisibility(View.GONE); 
       } 
      } 
     } 
     holder.name.setText(pd.getName()); 
     holder.position=position; 
     holder.price.setText(pd.getList_price() + "\u20B9"); 
     if (pd.getId()!=null) { 

      new AsyncTask<Integer, Void, ImageModel>() { 
       private ViewHolder v; 
       private ImageModel img; 
       @Override 
       protected ImageModel doInBackground(Integer... params) { 
        //v = params[0]; 
        final String url = "http://164.164.35.38:443/seis/productTemplateController/getProductImage/"+params[0]; 
        RestTemplate restTemplate = new RestTemplate(); 
        restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 
        img = restTemplate.getForObject(url, ImageModel.class); 
        //byte[] ing= 
        return img; 
       } 

       @Override 
       protected void onPostExecute(final ImageModel result) { 
        //super.onPostExecute(result);.get(0).toString().getBytes() 
        if (result != null && result.getImage()!=null) { 
         //imz=result.get(0).toString().getBytes(); 
         // If this item hasn't been recycled already, hide the 
         // progress and set and show the image 
         new AsyncTask<ViewHolder, Void, Bitmap>() { 
          private ViewHolder v; 

          @Override 
          protected Bitmap doInBackground(ViewHolder... params) { 
           v = params[0]; 
           Bitmap bm = BitmapFactory.decodeByteArray(android.util.Base64.decode(result.getImage(), 0), 0, android.util.Base64.decode(result.getImage(), 0).length); 
           return bm; 
          } 

          @Override 
          protected void onPostExecute(Bitmap result) { 
           super.onPostExecute(result); 
           if (v.position == position) { 
            // If this item hasn't been recycled already, hide the 
            // progress and set and show the image 
            v.im.setImageBitmap(result); 
           } 
          } 
         }.execute(holder); 
         //v.im.setImageBitmap(result); 
        } 
       } 
      }.execute(pd.getId()); 
     }*/ 


    @Override 
    public int getItemCount() { 
     return imageAndNames.size(); 
    } 
    public interface OnItemClickListener { 
     public void onItemClick(View view, int position); 
    } 

    public void SetOnItemClickListener(final OnItemClickListener itemClickListener) { 
     this.clickListener = itemClickListener; 
    } 
} 
+0

你想顯示彈出菜單或充氣新的佈局onclick購物車? –

+0

我想膨脹佈局,並設置警告對話框顯示正面和負面的按鈕。 –

+0

好的,我已經發布了答案..和upvote,如果有幫助 –

回答

0

您可以通過編程方式添加這些選項,而不使用如下所示的xml文件,可能會幫助您解決這個問題。

這裏ONE和TWO顯示的是你在彈出菜單中給出的選項索引(實際上是int值)。

private final static int ONE = 1; 
private final static int TWO = 2; 


PopupMenu popupMenu = new PopupMenu(this, findViewById(R.id.img_detail_information_options)); 
popupMenu.getMenu().add(Menu.NONE, ONE, Menu.NONE, getResources().getString(R.string.detail_information_edit_post)); 
popupMenu.getMenu().add(Menu.NONE, TWO, Menu.NONE, getResources().getString(R.string.detail_information_remove_post)); 
popupMenu.setOnMenuItemClickListener(this); 
popupMenu.show(); 

上面的代碼會顯示彈出這樣的:像在2號位1號位編輯文章如下holder.cart點擊打開彈出式菜單中刪除信息等

1) - Screenshot

+0

我想保留編輯文本和兩個按鈕在該彈出,是否有可能在菜單中,如果不是你可以幫助調用佈局,而不是菜單。 –

相關問題