【问题标题】:How to get object value from listview adapter position如何从列表视图适配器位置获取对象值
【发布时间】:2013-01-18 06:08:45
【问题描述】:

如何从适配器位置获取价值,我在下面有代码:

CategoriesXmlParser categoryXmlParser = new CategoriesXmlParser();
List<HashMap<String, Object>> categories = null;

try {
  categories = categoryXmlParser.parse(reader);
} catch (Exception e) {
  Log.d("Exception", e.toString());
}

String[] from = { "name", "image" };
int[] to = { R.id.nama_category, R.id.logo_category };

final SimpleAdapter adapter = new SimpleAdapter(getBaseContext(),
                    categories, R.layout.per_item_category, from, to);

mListView.setOnItemClickListener(new OnItemClickListener() {
  public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
    Object obj = mListView.getAdapter().getItem(position);
    String value = obj.toString();
    Log.d("MyLog", "Value is: "+value);
    String name = // how code to get name value.
  }
});

如果我在 MyLog 中的 logcat 上查看它,我会得到:

值为:{position=12, image_path=http://192.168.103.121/xml/icon.png, 链接=http://192.168.103.121/xml/category.php?kat_id=13,名称=类别 13}

所以我的问题是,我想从名称中获取值并将其存储到变量字符串名称中,我只想在字符串名称中获得“Category 13”。因为我想将它传递给另一个活动。

【问题讨论】:

  • 嗯,你用什么类型的对象填充你的适配器?您可以简单地将 getItem() 的结果转换为该结果,然后使用您实现的任何访问器来检索 name 字段的值。

标签: android listview listview-adapter


【解决方案1】:

貌似你用hashmap做的对象,比如blablabla.put("name", "value")??如是。试试这个:

mListView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
        Object obj = mListView.getAdapter().getItem(position);
        String value = obj.toString();
        Log.d("MyLog", "Value is: "+value);
        String name = // how code to get name value.
    }
});

改为:

mListView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        HashMap<String, Object> obj = (HashMap<String, Object>) adapter.getItem(position);
            String name = (String) obj.get("name");
            Log.d("Yourtag", name);
    }
});

【讨论】:

  • 感谢安迪 Unpam。这项工作适用于动态数据。所以我只是得到项目。是的,它使用哈希图。确实这是来自我使用的另一个代码。我最终添加了一门科学,即哈希图。谢谢...
  • 工作正常,因为(记住)mListView.getAdapter().getItem(position) 相同(Listview)有返回@String,如果没有,你可以使用 obj 字符串。跨度>
【解决方案2】:
value = value.substring(value.indexOf("name=")+5,value.length()-1);

【讨论】:

  • 修正值 = value.substring(value.indexOf("name=")+5, value.length()-1);
【解决方案3】:
listID.setOnItemClickListener(new AdapterView.OnItemClickListener() 
                {

                    @Override
                    public void onItemClick(AdapterView<?> parent, View v,
                            int position, long id) {
                        // TODO Auto-generated method stub

                        Object obj=listID.getAdapter().getItem(position);
                        String str=obj.toString();

                    Toast.makeText(MainActivity.this, "Item is= "+str, Toast.LENGTH_LONG).show();
                    }
                });

【讨论】:

  • 朋友们,这段代码可能会帮助您获得结果
  • 有没有办法获取列表中的原始ID?我得到的只是字符串中事物的名称。提前致谢
【解决方案4】:

您也可以通过AdapterView&lt;?&gt; parent获取适配器数据

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    //setHasOptionsMenu(true);
    listView.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            final Filedata mnotes = (Filedata) parent
                    .getItemAtPosition(position);
           Toast.makeText(getActivity(), Filedata.getName(),Toast.LENGTH_SHORT).show();
});
}

【讨论】:

    【解决方案5】:

    这就是我所做的:-

    lvHomePage.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                       @Override
                       public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                           Transaction selectedFromList =(Transaction)parent.getAdapter().getItem(position);
                           Log.d("val:",selectedFromList.getDate());
                           Log.d("val:",selectedFromList.getMobile_no());
                       }
                   });
    

    玩得开心!

    【讨论】:

      【解决方案6】:

      listID.setOnItemClickListener(new AdapterView.OnItemClickListener() {

                      @Override
                      public void onItemClick(AdapterView<?> parent, View v,
                              int position, long id) {
                                       
      

      HashMap sdsa = (HashMap) adapter.getItem(position); Log.e("IndentNo", (String) sdsa.get("IndentNo")); Log.e("IndentId", (String) sdsa.get("IndentId"));

                      }
                  });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-17
        • 1970-01-01
        • 1970-01-01
        • 2012-08-24
        • 2017-01-03
        • 1970-01-01
        • 2019-08-07
        相关资源
        最近更新 更多