我正在为一个网站创建一个聊天应用程序。只要有人访问该网站,就会向网站管理员发送带有他们姓名的通知,告知该人已到达您的网站。
现在在应用程序中有两个活动,一个用于客户端和管理员聊天,另一个用于到达站点的客户端列表,当客户端到达时,它会不断更新。如果管理员单击客户端列表活动中的名称,则会放置一个绿点在他的名字前面表示您当前正在与此人聊天的管理员。多个点将放置在该客户列表的不同区域,因为管理员将单击它们。帮助管理员记住他一直在与谁交谈。
问题是,如果我运行应用程序并且第一个客户到达客户列表。我点击他的名字,我被带到聊天页面(很好)。我回去,我看到它前面放了一个绿点。但是在客户列表活动中,当第三个人到达并且客户列表添加了他(记住我只点击了第一个,即点出现在客户列表的第一项前面的 0 位置)时,我的绿点从位置 0 向下移动自动定位到 1。
我不知道为什么会这样。
下面是如何将 Ip 作为通知发送到 clientlist 活动的。
Intent i=new Intent("android.intent.action.GET_IP").putExtra("ClientIp", ip);
this.sendBroadcast(i);
这是我在客户端列表活动中接收它并将其转发给我的lazyadapter
班级以将其添加到列表视图中的方式。
mReceiver=new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(!ParseXML.ConfirmIpExistance(adapter.iplist, intent.getExtras().getString("ClientIp")))
{
adapter.InsertIntoExistingClients(intent.getExtras().getString("ClientIp"));
}
}
};
这是要在客户端列表视图中插入的 LazyAdapter 函数。
public void InsertIntoExistingClients(String ip) //runs when you are on the clientlistactivity to insert only one item.
{
this.iplist.add(ip);
this.notifyDataSetChanged();
}
当管理员在客户端列表活动中单击客户端名称时,他的列表视图位置将被发送到下一个活动。在下一个活动(聊天页面)中,检查其他管理员是否已经在与该客户端交谈,如果是,OnActivityResult
则调用上一个带有代码的活动告诉它不要插入图像,因为这个管理员没有与他点击的那个客户交谈。但是如果没有其他管理员在说话,这意味着。他可以说话。所以代码和列表视图位置(从用户单击客户端名称时的先前活动)被发回,OnActivityResult
并将图像放在列表视图中其名称的前面。
这是怎么回事。OnListViewItemClick:
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position,long id) {
try {
selectedPeople.add(position);
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);
}
catch(Exception e)
{
Log.e("erora",e.getMessage());
}
}
});
以下是我接受答案的方式onAcvitityResult
:
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data)
{
try {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode!= 23)
{
ImageView imageView=(ImageView)lv.getChildAt(data.getExtras().getInt("ChildAt")).findViewById(R.id.onlineImg);
imageView.setImageResource(R.drawable.online);
}
}catch(Exception e)
{
Log.e("ClientList_onActivityResult",e.getMessage());
}
}
仅当客户端已经在与其他管理员而不是该管理员交谈时,才会发送结果代码 23。最后的问题是我如何才能停止这种情况,即绿点在列表视图中自动将其位置从 0 更改为 1 .