Как получить значение из списка с многомерным массивом? - PullRequest
0 голосов
/ 14 мая 2019

Итак, у меня есть многомерный массив для моего списка, он сконструирован так:

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

Допустим, первая строка - это текст, который я хочу отобразить в виде списка, а другая - идентификатор / сообщение, которое нужно отправить через сокет (скажем, секретное значение).

Я закодировал адаптер следующим образом:

    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);

И я создал слушатель щелчка элемента:

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( ... );


            }
        });

Из прослушивателя щелчков я хочу получить другое значение, например, Если я нажал «Закрыть соединение» в виде списка, я хочу получить из него значение «1» и поместить его в переменную. Заранее спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Напишите специальный адаптер для вашего случая. Используйте 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

1 голос
/ 14 мая 2019

То, что вы можете сделать, это

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

Это, конечно, будет работать, только если у вас есть доступ к listControls.Если нет, я бы выбрал создание объекта SomethingWithCode (String text, Int code) [или просто Pair in kotlin] и создание собственного адаптера.

Надеюсь, это поможет!

Кроме того,вам, вероятно, не нужен многомерный массив для него, если вы всегда передаете только два значения (обратитесь к объекту с параметрами string и int)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...