나는 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();
}
});
확인 여기에 대답의 나 : http://stackoverflow.com/questio imageButton1의 참조입니다 ns/20002051/item-from-a-item-from-a-pop-in-a-custom-listview/21227304 # 21227304 –