【问题标题】:Lazy loading onclick listview延迟加载onclick listview
【发布时间】:2013-06-05 09:55:46
【问题描述】:

我正在为列表视图执行延迟加载代码,其中我在 json 中获取文本和图像 url 并将它们放入列表视图中。

图像和文本都按照我想要的方式显示。

我面临的问题是当列表向下或向上滚动时,视图的索引会受到干扰。

假设我的列表中有 10 个元素,并且图像横向预览。最初我可以看到 4 个元素的 onclick 操作正常, 但是当我向下滚动并单击第 7 个和第 8 个元素时,索引会受到干扰并导致空指针异常。

   l2.setOnItemClickListener(new OnItemClickListener() {
    @Override
     public void onItemClick(AdapterView<?> parent, View view,int position, long id) 
        {
            View curr = parent.getChildAt((int) id);
            TextView c = (TextView)curr.findViewById(R.id.text);
            String sel_item = c.getText().toString();
            Intent intent = new Intent(SubCatListActivity.this,GridActivity.class);
             adapter.imageLoader.clearCache();
            intent.putExtra("gall", sel_item);
            intent.putExtra("cate", cate);
            startActivity(intent);
            Toast.makeText(SubCatListActivity.this,sel_item, Toast.LENGTH_SHORT).show();

         }});

问题似乎与文本视图有关,因为我无法在列表的 onclick 上获得所需的文本。

如果我触摸第 6 个元素,我会得到第 7 或第 8 个项目的文本。

【问题讨论】:

  • 请不要在标题中对我们大喊大叫...

标签: android listview onclick textview android-lazyloading


【解决方案1】:

你可以试试把这行改成

TextView c = (TextView) view.findViewById(R.id.text);

并删除您的第一行 View curr = parent.getChildAt((int) id);

l2.setOnItemClickListener(new OnItemClickListener() {
@Override
 public void onItemClick(AdapterView<?> parent, View view,int position, long id) 
    {

        TextView c = (TextView) view.findViewById(R.id.text);
        String sel_item = c.getText().toString();
        Intent intent = new Intent(SubCatListActivity.this,GridActivity.class);
         adapter.imageLoader.clearCache();
        intent.putExtra("gall", sel_item);
        intent.putExtra("cate", cate);
        startActivity(intent);
        Toast.makeText(SubCatListActivity.this,sel_item, Toast.LENGTH_SHORT).show();

     }});

【讨论】:

    【解决方案2】:

    onItemClick 方法传入您正在单击的视图。在上面的代码中,您将其命名为“view”。 parent.getChildAt((int)id) 不会给你正确的观点。

    【讨论】:

      【解决方案3】:

      尝试切换位置,获取textView文本为:

      (TextView) view.getText().toString();
      

      这样你会得到正确的textView

      【讨论】:

        【解决方案4】:

        您应该使用从参数中获得的视图:

        TextView c = (TextView)view.findViewById(R.id.text);

          l2.setOnItemClickListener(new OnItemClickListener() {
         @Override
         public void onItemClick(AdapterView<?> parent, View view,int position, long id) 
            {
        
                TextView c = (TextView)view.findViewById(R.id.text);
                String sel_item = c.getText().toString();
                Intent intent = new Intent(SubCatListActivity.this,GridActivity.class);
                 adapter.imageLoader.clearCache();
                intent.putExtra("gall", sel_item);
                intent.putExtra("cate", cate);
                startActivity(intent);
                Toast.makeText(SubCatListActivity.this,sel_item, Toast.LENGTH_SHORT).show();
        
             }});
        

        【讨论】:

          猜你喜欢
          • 2018-09-05
          • 1970-01-01
          • 2013-04-19
          • 1970-01-01
          • 1970-01-01
          • 2020-04-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多