2014-11-27 2 views
0

나는 android에서 listview에 팝업 메뉴를 구현 중입니다. 이 줄에 널 포인터 예외가 발생했습니다.android에서 listview에 팝업 메뉴를 구현하는 방법

PopupMenu popupMenu = new PopupMenu(mContext,view.findViewById(R.id.imageButton1)); 

** 첫 번째 행의 팝업 메뉴 만 작동합니다. 다른 행의 버튼을 클릭하면 예외가 발생합니다.

이유는 앵커보기가 컨텍스트가 아니라 null입니다. 이 문제를 해결하는 방법?

여기 내 완벽한 getView 메소드가 있습니다. 당신이 당신의 PopMenu에 대한 anchorView로, 클릭 버튼을 사용하고자하기 때문에

@Override 
public View getView(int position,View convertView, ViewGroup parent) { 

    ViewHolderItem viewHolder = null; 

    final View view = convertView; 

    if (convertView == null) { 

     if (inflater == null) { 
      inflater = (LayoutInflater) mContext 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     } 
     convertView = inflater.inflate(R.layout.main_list_row, null); 

     viewHolder = new ViewHolderItem(); 

     viewHolder.tvTitle = (TextViewPlus) convertView 
       .findViewById(R.id.tvShowTitle); 
     viewHolder.tvChannelName = (TextViewPlus) convertView 
       .findViewById(R.id.tvChannelName); 
     viewHolder.tvViews = (TextViewPlus) convertView 
       .findViewById(R.id.tvViews); 
     viewHolder.ivThumbImage = (ImageView) convertView 
       .findViewById(R.id.ivThumbImage); 
     viewHolder.tvShowId = (TextView) convertView 
       .findViewById(R.id.tvShowId); 
     viewHolder.btnSubscribe = (Button)convertView.findViewById(R.id.btnSubscribe); 
     //viewHolder.imgButton = (ImageButton)convertView.findViewById(R.id.imageButton1); 
     viewHolder.btnTest = (Button)convertView.findViewById(R.id.imageButton1); 

     convertView.setTag(viewHolder); 

    } else { 

     viewHolder = (ViewHolderItem) convertView.getTag(); 
    } 

    SharedPreferences SP = PreferenceManager 
      .getDefaultSharedPreferences(mContext); 
    String languageType = SP.getString("applicationLanguage", "2"); 

    final Show show = data.get(position); 

    if (languageType.equals("2")) { 
     viewHolder.tvTitle.setText(show.getShowNameEn()); 
     viewHolder.tvChannelName.setText(show.getChannelNameEn()); 
    } else { 
     viewHolder.tvTitle.setText(show.getShowNameSi()); 
     viewHolder.tvChannelName.setText(show.getChannelNameSi()); 
    } 

    viewHolder.tvViews.setText("Views :" + show.getViews()); 
    viewHolder.tvShowId.setText(show.getShowId()); 
    viewHolder.btnSubscribe.setTag(position); 
    viewHolder.btnTest.setTag(position); 

    if(show.getSubscribed()==0){ 
     viewHolder.btnSubscribe.setText("Subscribe"); 
    }else{ 
     viewHolder.btnSubscribe.setText("Unsubscribe"); 
    } 

    viewHolder.btnSubscribe.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      int result = dbHelper.subscribeShow(Integer.parseInt(show.getShowId())); 

      if(result>0){ 

       if(((Button)v).getText().equals("Subscribe")){ 
        ((Button)v).setText("Unsubscribe"); 
       }else if(((Button)v).getText().equals("Unsubscribe")){ 
        ((Button)v).setText("Subscribe"); 
       } 
      } 

      data = dbHelper.getShowList(Integer.parseInt(show.getCategoryId())); 

     } 
    }); 

    viewHolder.btnTest.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      PopupMenu popupMenu = new PopupMenu(mContext,view.findViewById(R.id.imageButton1)); 

      popupMenu.inflate(R.menu.list_menu); 

      popupMenu.show(); 

     } 
    }); 
+0

확인 여기에 대답의 나 : http://stackoverflow.com/questio imageButton1의 참조입니다 ns/20002051/item-from-a-item-from-a-pop-in-a-custom-listview/21227304 # 21227304 –

답변

4

, 당신은 같은 vview.findViewById을 변경할 수 있습니다

viewHolder.btnTest.setOnClickListener(new View.OnClickListener() {  
     @Override 
     public void onClick(View v) { 
      PopupMenu popupMenu = new PopupMenu(mContext,v); 
      popupMenu.inflate(R.menu.list_menu); 
      popupMenu.show(); 
     } 
    }); 
1

필요 없음 클릭 V에에서 수동으로 findViewById를 imageButton1에

PopupMenu popupMenu = new PopupMenu(mContext,v); 
관련 문제