【问题标题】:Android ListView - Select element by database table IDAndroid ListView - 按数据库表 ID 选择元素
【发布时间】:2016-06-09 16:48:51
【问题描述】:

我有一个listView,我使用loader1/adapter1contentUri1填充。

我现在需要做的是用loader2 监控contentUri2,以便用其他数据更新同一listView 中的项目。

因此,为了做到这一点,我想知道是否有任何方法可以通过基础数据库表 ID 从 listView 中选择元素(因为数据库表 ID 对于 contentUri1contentUri2 很常见)?

(我考虑过的一种解决方法是创建和使用单个 contentUri3 来合并来自 contentUri1contentUri2 的数据,但如果可以避免,我宁愿不必采用这种方法。)

任何其他解决方法/建议也值得赞赏。

【问题讨论】:

  • 您可以尝试在每个 listView 项目上使用数据库表 ID 设置标签。然后,您可以对它们调用 getTag 以确定要选择哪些。

标签: android listview android-contentprovider simplecursoradapter listadapter


【解决方案1】:

是的,您可以创建一个包含 contentUri 和 id 的模型类。比如:

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 关联的 id。希望这会有所帮助

【讨论】:

    【解决方案2】:

    您可以使用不可见的 textView 来存储 id 的值。

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

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      无论您在哪里填充listView,都可以将标签添加到各个项目:

      YourListItemView.setTag(YourTagKey, YourTagValue);
      

      然后,当你需要它时,在视图上调用getTag 来检索标签:

      String tagValue = YourListItemView.getTag(YourTagKey);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-01
        • 1970-01-01
        • 2013-04-26
        • 2020-09-07
        • 1970-01-01
        • 2014-09-13
        相关资源
        最近更新 更多