如何使用多维数组从列表视图中获取值?

How to get a value from listview with multidimensional array?

所以我的列表视图有一个多维数组,它的构造如下:

    String[][] listControls = {
            {"Shutdown Host","10"},
            {"Close Connection","1"}};

假设第一个字符串是我想在列表视图中显示的文本,另一个是 id/message 通过套接字发送(假设它是一个秘密值)。

我这样编写适配器:

    ArrayAdapter adapter = new ArrayAdapter<String>(this,R.layout.layout_listview);
        for(int i = 0; i < listControls.length; i++) {
            adapter.add(listControls[i][0]);
        }

    listView = (ListView) findViewById(R.id.controls_listView);
    listView.setAdapter(adapter);
    listView.setClickable(true);

并且我构建了一个item的点击监听器:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Object obj = listView.getItemAtPosition(position);

                //What should I add here? to get specific value from the array?
                //Integer cmdId = Integer.parseInt( ... );


            }
        });

我想从点击侦听器中获取另一个值,例如如果我在列表视图中单击 "Close Connection",我想从中获取“1”值并将其放入变量中。 在此先感谢您的帮助。

你能做的是

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                  String value = listControls[position][1] 
            }

这当然只有在您有权访问 listControls 时才有效。如果没有,我会选择创建一个对象 SomethingWithCode(String text, Int code)[或者只是在 kotlin 中配对] 并创建一个自定义适配器。

希望对您有所帮助!

此外,如果您总是只传递两个值(请参阅带有字符串和整数参数的对象),您可能不需要多维数组

为您的情况编写自定义适配器。使用总是更好的 HashMap。

HashMap<String, Integer> map = new LinkedHashMap<>();
map.add("Shut Down Host", 0);
map.add("Close connection", 1);

最重要的是使用 RecyclerView。

RecyclerView 教程https://developer.android.com/guide/topics/ui/layout/recyclerview