Android ListView - выберите элемент по идентификатору таблицы базы данных

У меня есть listView, который я заполняю из contentUri1, используя loader1/adapter1.

Теперь мне нужно отслеживать contentUri2 с помощью loader2, чтобы обновлять элементы в том же listView дополнительными данными.

Поэтому, чтобы сделать это, мне интересно, могу ли я каким-либо образом выбирать элементы из listView по их базовому идентификатору таблицы базы данных (поскольку идентификаторы таблиц базы данных являются общими для contentUri1 и contentUri2)?

(Обходной путь, который я рассмотрел, состоит в том, чтобы создать и использовать один contentUri3, который объединяет данные из contentUri1 и contentUri2, но я бы предпочел не использовать этот подход, если его можно избежать.)

Любые другие обходные пути/предложения также приветствуются.


person ban-geoengineering    schedule 09.06.2016    source источник
comment
Вы можете попробовать установить тег для каждого элемента listView с идентификатором таблицы базы данных. Затем вы можете вызвать для них getTag, чтобы определить, какие из них вы хотите выбрать.   -  person Sammy T    schedule 09.06.2016
comment
В соответствии с stackoverflow.com/questions/10644142/ (?)   -  person ban-geoengineering    schedule 10.06.2016


Ответы (3)


Да, вы можете создать класс модели, который содержит contentUri и идентификаторы. Что-то типа:

public class ListContents {

    private Uri contentUri;
    private int id;

    public ListContents(Uri contentUri, int id) {
        this.contentUri = contentUri;
        this.id = id;
    }

    public Uri getContentUri() {
        return this.uri:
    }

    public int getId() {
        return this.id;
    }

}

Затем вы можете создать ArrayList этого класса, и вы сможете получить идентификаторы, связанные с каждым contentUri. Надеюсь это поможет

person akyirem samuel    schedule 09.06.2016

Вы можете использовать невидимый textView для хранения значения идентификатора.

 ArrayList<HashMap<String, String>> hashExample = new ArrayList<>();


            Integer id = 1 ;
            String value = "value";

                HashMap<Integer, String> map = new HashMap<>();
                map.put("ID", "" + id);
                map.put("VALUE", value);
                hashExample.add(map);                


            String[] from = {"ID", "VALUE"};
            int[] to = {R.id.txtID, R.id.txtValue};
            adapter = new SimpleAdapter(getActivity(), hashExample,
                    R.layout.list_item_example, from, to);
            ListView list = (ListView) getView().findViewById(R.id.listView);

           list.setAdapter(adapter);

Чтобы получить данные, реализуйте это в onItemClickListener или что-то в этом роде.

       list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

                     Integer id = Integer.valueOf(((Map<String, String>) adapter.getItem(arg2)).get("ID"));

                        String value= ((Map<String, String>) adapter.getItem(arg2)).get("VALUE");

                    }
                });

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

person Lucas Queiroz Ribeiro    schedule 10.06.2016

Где бы вы ни заполняли свой listView, добавляйте теги к отдельным элементам:

YourListItemView.setTag(YourTagKey, YourTagValue);

Затем, когда вам это нужно, вызовите getTag в представлении, чтобы получить тег:

String tagValue = YourListItemView.getTag(YourTagKey);
person Sammy T    schedule 10.06.2016