我有一个列表视图,当用户单击一个项目时,我会显示用户单击该项目的图像。列表视图从通知中填充。
假设在列表视图中添加了一个项目。现在我单击该项目,图像显示在它的前面。现在当我在列表视图中输入新项目时,什么都不会发生(现在列表视图中有 2 个项目)。当我在列表视图中添加第三个项目时,位置 0 的项目的图像隐藏并显示在位置 1。为什么会发生这种情况?
现在在列表视图项中添加图像。我必须首先对下一个打开活动执行一些检查,如果这些检查成功,那么我将在活动中单击的项目前面放置一个图像。
所以要做到这一点,我所做的是我在下一个活动中发送单击的项目位置并执行这些检查,如果这些检查成功,我将onActivityResult
使用我发送到此活动的位置放置并图像上一个活动的功能.意味着我将该位置值发送回onActivityResult
放置图像的函数中的前一个活动。
图像的放置工作正常。但是当我收到通知时,我在列表视图中添加了项目,这导致getView
再次为列表视图中的每个项目调用函数以填充列表视图。这里出现问题,即来自位置 0 项目的图像在列表中转到位置 1 项目。
请询问是否需要更多解释或不清楚的地方。
这是listview Item Click的代码:
TextView tv=(TextView)view.findViewById(R.id.clientip);
Intent i=new Intent(getApplicationContext(),ChatPageActivity.class);
i.putExtra("AdminEmail",ClientListActivity.AdminEmail);
i.putExtra("ClientIp",tv.getText().toString());
i.putExtra("ChildAt", position);
startActivityForResult(i, 200);
ChildAt
是我发送的位置。在下一个活动中执行检查后。
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data)
{
try {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode!= 23)
{
Integer integer=data.getExtras().getInt("ChildAt");
ImageView imageView=(ImageView)lv.getChildAt(integer).findViewById(R.id.onlineImg);
imageView.setImageResource(R.drawable.online);
}
}catch(Exception e)
{
Log.e("ClientList_onActivityResult",e.getMessage());
}
}
如果onActivityResult
代码不等于 23,则表示下一个活动中的所有检查都是正确的,您可以将图像放置在从下一个活动再次发送回该活动的位置。
这getView
是我的 BaseAdapter 类的代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view=convertView;
if(convertView==null)
view=inflater.inflate(R.layout.activeclientlist,null);
TextView ip=(TextView)view.findViewById(R.id.clientip);
String clientip=this.iplist.get(position);
ip.setText(clientip);
return view;
}
在baseADapter
我使用这段代码在现有列表视图中插入项目..
this.iplist.add(ip);
this.notifyDataSetChanged();
重要提示:
我还想提一下,这种行为发生在一种模式中,即正如我在上面所说的那样,当我插入第三个项目时,图像位置会发生变化。之后,当我添加第五个项目时,它会再次发生变化,依此类推。