Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何将弹出菜单添加到每个项目的自定义列表视图中_Android_Listview_Android Custom View - Fatal编程技术网

Android 如何将弹出菜单添加到每个项目的自定义列表视图中

Android 如何将弹出菜单添加到每个项目的自定义列表视图中,android,listview,android-custom-view,Android,Listview,Android Custom View,我一度陷入困境。 我想在自定义列表视图中为每个项目添加弹出菜单。 我试过了,但它只是在列表的最后一个位置或最后一项出现。我得到了它出现在最后一个位置的原因,但没有得到解决方案 这里我添加了适配器类 public class InterestLevelAdapterEditable extends BaseAdapter { private Activity activity; private TextView level; private InterestLevel

我一度陷入困境。 我想在自定义列表视图中为每个项目添加弹出菜单。 我试过了,但它只是在列表的最后一个位置或最后一项出现。我得到了它出现在最后一个位置的原因,但没有得到解决方案 这里我添加了适配器类

public class InterestLevelAdapterEditable extends BaseAdapter {

    private Activity activity;
    private  TextView level;
    private InterestLevel m;
    private LayoutInflater inflater;
    private List<InterestLevel> interestLevelList;

    public InterestLevelAdapterEditable(Activity activity, List<InterestLevel> interestLevelList) {
        this.activity = activity;
        this.interestLevelList = interestLevelList;
    }

    @Override
    public int getCount() {
        return interestLevelList.size();
    }

    @Override
    public Object getItem(int location) {
        return interestLevelList.get(location);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

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

        if (inflater == null)
            inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null)
            convertView = inflater.inflate(R.layout.interest_level_editable, null);


        TextView sports_name = (TextView) convertView.findViewById(R.id.sportsName);
        level = (TextView) convertView.findViewById(R.id.level);

         m = interestLevelList.get(position);

        sports_name.setText(m.getSports_name());

        level.setText(m.getLevel());
        level.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Creating the instance of PopupMenu
                PopupMenu popup = new PopupMenu(activity, level);
                //Inflating the Popup using xml file
                popup.getMenuInflater().inflate(R.menu.popup_level, popup.getMenu());

                //registering popup with OnMenuItemClickListener
                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    public boolean onMenuItemClick(MenuItem item) {
                        level.setText(item.getTitle());
                        return true;
                    }
                });

                popup.show();//showing popup menu
            }
        });

        return convertView;
    }

}
公共类InterestlevelAdapterEdit扩展BaseAdapter{
私人活动;
私有文本视图级别;
私人利益水平m;
私人充气机;
私人利益清单;
public InterestleLevel AdapterEdit(活动,列表InterestleLevel列表){
这个。活动=活动;
this.interestLevelList=interestLevelList;
}
@凌驾
public int getCount(){
return interestLevelList.size();
}
@凌驾
公共对象getItem(int位置){
返回interestLevelList.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
如果(充气器==null)
充气器=(充气器)活动
.getSystemService(上下文布局\充气机\服务);
if(convertView==null)
convertView=充气机。充气(R.layout.interest\u level\u可编辑,空);
TextView sports_name=(TextView)convertView.findViewById(R.id.sportsName);
level=(TextView)convertView.findViewById(R.id.level);
m=利息水平列表。获取(位置);
sports_name.setText(m.getSports_name());
level.setText(m.getLevel());
level.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//创建PopupMenu的实例
PopupMenu popup=新的PopupMenu(活动、级别);
//使用xml文件打开弹出窗口
popup.getMenuInflater().充气(R.menu.popup_level,popup.getMenu());
//向OnMenuItemClickListener注册弹出窗口
setOnMenuItemClickListener(新的PopupMenu.OnMenuItemClickListener(){
公共布尔onMenuItemClick(菜单项){
level.setText(item.getTitle());
返回true;
}
});
popup.show();//显示弹出菜单
}
});
返回视图;
}
}
我得到的理由是,我必须在单击侦听器时传递position,但没有得到我应该如何添加position或(m object of InterestLevel,它具有position)


提前谢谢

setOnClickListener()
show()
中创建
PopupMenu
外部


我需要像listview一样的弹出菜单。我尝试了这段代码,它是正确的()

private静态最终字符串TITLE=“TITLE”;
私有静态最终字符串ICON=“ICON”;
私有列表数据=新的ArrayList();
//使用此选项可将项目添加到ListPopupWindow将使用的列表中
私有void附加项(字符串标题,int-iconResourceId){
HashMap=newHashMap();
地图放置(标题,标题);
map.put(图标,iconResourceId);
数据。添加(地图);
}
//如果要显示ListPopupWindow,请调用此选项
私有void showListMenu(查看锚定){
ListPopupWindow-popupWindow=新ListPopupWindow(此);
ListAdapter=新的SimpleAdapter(
这
数据,
android.R.layout.activity\u list\u item,//您可能需要使用自己的酷布局
新字符串[]{TITLE,ICON},//这些仅仅是存储数据的键
使用
新int[]{android.R.id.text1,android.R.id.icon});//视图id
将数据映射到
popupWindow.setAnchorView(锚);
popupWindow.setAdapter(适配器);
setWidth(400);//注意:不要使用像素,使用dimen资源
popupWindow.setOnItemClickListener(myListener);//选择列表项时的回调
popupWindow.show();
}

感谢Shadab的回答,但此解决方案不会将列表项值更新到每个位置,而是像以前一样只更新最后一个列表项值。因此,我们需要传递每个位置更新项目文本的位置。
//Creating the instance of PopupMenu
final PopupMenu popup = new PopupMenu(activity, level);
//Inflating the Popup using xml file
popup.getMenuInflater().inflate(R.menu.popup_level, popup.getMenu());

//registering popup with OnMenuItemClickListener
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
    public boolean onMenuItemClick(MenuItem item) {
        level.setText(item.getTitle());
        return true;
    }
});

level.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {    
        popup.show();//showing popup menu
    }
});
private static final String TITLE = "title";
private static final String ICON = "icon";

private List<HashMap<String, Object>> data = new ArrayList<HashMap<String, 
Object>>();

// Use this to add items to the list that the ListPopupWindow will use
private void addItem(String title, int iconResourceId) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put(TITLE, title);
map.put(ICON, iconResourceId);
data.add(map);
}

// Call this when you want to show the ListPopupWindow
private void showListMenu(View anchor) {
ListPopupWindow popupWindow = new ListPopupWindow(this);

ListAdapter adapter = new SimpleAdapter(
        this,
        data,
        android.R.layout.activity_list_item, // You may want to use your own cool layout
        new String[] {TITLE, ICON}, // These are just the keys that the data 
uses
        new int[] {android.R.id.text1, android.R.id.icon}); // The view ids 
to map the data to


popupWindow.setAnchorView(anchor);
popupWindow.setAdapter(adapter);
popupWindow.setWidth(400); // note: don't use pixels, use a dimen resource
popupWindow.setOnItemClickListener(myListener); // the callback for when a list item is selected
popupWindow.show();
}