我正在为列表视图执行一个lazyload代码,我在json中获取了一个文本和图像URL并将它们放在listview中。
图像和文字都相应地显示为我想要的。
我面临的问题是当列表向下或向上滚动时,视图的索引会受到干扰。
假设我的列表中有10个元素,其中图像横向预览。最初我可以看到onclick动作工作正常的4个元素, 但是当我向下滚动并单击第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();
}});
问题似乎与textview有关,因为我无法在列表的onclick上获得所需的文本。
如果我触摸第6个元素,我会得到第7或第8个项目的文本。
答案 0 :(得分: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();
}});
答案 1 :(得分:1)
onItemClick方法传入您单击的视图。在上面的代码中,您将其命名为“view”。 parent.getChildAt((int)id)不会为您提供正确的视图。
答案 2 :(得分:1)
尝试在不同位置之间切换,并将textView文本设为:
(TextView) view.getText().toString();
您将以这种方式获得正确的textView
答案 3 :(得分:1)
您应该使用从参数中获得的视图:
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();
}});