gpt4 book ai didi

java - 在 View 的 onCreateContextMenu 中创建上下文菜单时,AdapterView.AdapterContextMenuInfo 为 null

转载 作者:行者123 更新时间:2023-11-30 02:18:51 25 4
gpt4 key购买 nike

我有一个应用程序,它对 Activity 的 fragment 有很多看法。其中许多 View 需要上下文菜单,因此我必须在 View 的 onCreateContextMenu 中而不是在 Activity 的 onCreateContextMenu 中定义上下文菜单。当我尝试访问 AdapterContextMenuInfo 对象时出现问题,如

AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

在 Activity 的 onContextItemSelected 方法中..该对象 (info) 返回 null。在这种情况下我如何获得这个对象?谢谢。在 View 类中,我有:在它的构造函数中,我从它的 View 初始化 ListView 并注册它对于上下文菜单:

class ContactsList  extends RelativeLayout implements OnItemClickListener,OnItemLongClickListener
ListView pageList;
ContactsListAdapter adapter = new ContactsListAdapter();

public ContactsList(final MainActivity activity, RelativeLayout mainXmlLayout ) {
super(activity);
setLayoutParams( new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT ));

addView(mainXmlLayout);

pageList = (ListView)findViewById(R.id.contactslist);
pageList.setAdapter(adapter);

Utils.loadContactsList();
pageList.setOnItemClickListener(this);

activity.registerForContextMenu(pageList);
}//end constructor

@Override
public void onCreateContextMenu(ContextMenu menu) {
super.onCreateContextMenu(menu);

MenuInflater inflater = MainActivity.getActivity().getMenuInflater();


inflater.inflate(R.menu.contacts_context_menu, menu);
menu.setHeaderTitle("Contact");

}
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
//....
return false;
}
public void onItemClick(AdapterView<?> adView, View target, int position, long id) {
//.....
}

and in the activity I have:

@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

Utils.logErrorMessage("info = "+info);
switch (item.getItemId()) {...}
}//end method



}

最佳答案

我刚刚通过稍微更改应用程序的结构解决了这个问题。我没有在 View 中定义上下文菜单,而是在需要上下文菜单的 ListView 上设置了一个标记,并使用 switch 语句在父 Activity 的 onCreateContextMenu 中定义它们。然后我在 Activity 的 onContextItemSelected 方法中以正常方式访问它们。例如

首先,我在父 View 的类构造函数中设置列表上的标签:

例如

pageList.setTag("Contacts");

然后在包含 View 的 Activity 中:

    @Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
MenuInflater inflater = getActivity().getMenuInflater();

switch (v.getTag().toString()) {
case "Contacts":
inflater.inflate(R.menu.contacts_context_menu, menu);
menu.setHeaderTitle("Contact");
break;
case "Chats":
inflater.inflate(R.menu.chat_contacts_context_menu, menu);
menu.setHeaderTitle("Contact");
break;
case "GroupChats":
inflater.inflate(R.menu.groups_context_menu, menu);
menu.setHeaderTitle("Your Group");
break;

default:
break;
}
}

@Override
public boolean onContextItemSelected(MenuItem item) {
super.onContextItemSelected(item);

AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

Utils.logErrorMessage("info = "+info);
switch (item.getItemId()) {
case R.id.chatwithcontact:
//...do something
return true;
}

}//end method

关于java - 在 View 的 onCreateContextMenu 中创建上下文菜单时,AdapterView.AdapterContextMenuInfo 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28894107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com