【问题标题】:android get listview item by contextmenuandroid通过contextmenu获取listview项
【发布时间】:2015-02-19 06:13:15
【问题描述】:

在我的应用程序中,我在 Listview 上注册了 ContextMenu,我希望通过上下文菜单点击 Listview 项目。例如,如果我在具有这种结构的列表视图中有两行:

public class StructReceiveSms{

    public int     userID;
    public String  username;
}

我的适配器可以在列表视图中显示用户名。现在我在下面的代码中可以在列表视图上定义 conext 菜单:

public class FragmentSmsReceiveMaster extends Fragment {

    private static final Boolean        DEBUG    = true;
    public ArrayAdapter                 adapter;
    private ArrayList<StructReceiveSms> receiveSmsArray;
        .
        .
        .
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        .
        .
        .
        smsView = (ListView) view.findViewById(R.id.listView);
        smsView.setAdapter(adapter);
        registerForContextMenu(smsView);
        .
        .
        .
}
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
        String[] menuItems = getResources().getStringArray(R.array.SmsMasterContextMenu);
        for (int i = 0; i < menuItems.length; i++) {
            menu.add(Menu.NONE, i, i, menuItems[i]);
        }
    }


    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
        int menuItemIndex = item.getItemId();
        String listItemName = adapter.getItem(info.position) + "";

        /* GET CLICKED LISTVIEW ITEM AFTER CHOOSE CONTEXTMENU MENU ITEMS */

        Toast.makeText(G.currentActivity, listItemName, Toast.LENGTH_SHORT).show();
        return true;
    }
}

现在单击上下文菜单项后,我可以通过menuItemIndex 获取用户单击的哪个项目,但我无法在onContextItemSelected 函数中获取Listview 的哪些项目。例如,在第一个项目上打开上下文菜单,我可以得到 userIDusername 并显示它。怎么做,谢谢

【问题讨论】:

    标签: android listview


    【解决方案1】:

    由于您的适配器的数据列表由StructReceiveSms 对象组成,onContextItemSelected() 中的adapter.getItem(info.position) 调用将返回打开上下文菜单的列表项,但需要将其转换为StructReceiveSms 类型。从中可以得到你想要的userIDusername

    public boolean onContextItemSelected(MenuItem item)
    {
        ...
        StructReceiveSms listItem = (StructReceiveSms) adapter.getItem(info.position);
        String selectedName = listItem.username;
        int selectedId = listItem.userID;
        ... 
    }
    

    这是假设您没有重写 Adapter 的 getItem() 方法来返回其他内容,但我想如果您有的话,您会证明这一点。

    【讨论】:

      猜你喜欢
      • 2019-06-20
      • 1970-01-01
      • 2020-04-05
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多