Web サイト用のチャット アプリケーションを作成しています。だれかが Web サイトにアクセスするとすぐに、その人物があなたのサイトに到着したという通知がその名前とともにサイト管理者に送信されます。
アプリケーションには、クライアントと管理者のチャット用の 2 つのアクティビティと、サイトに到着したクライアントのリスト用の 2 つのアクティビティがあり、クライアントが到着すると更新され続けます。管理者がクライアント リスト アクティビティの名前をクリックすると、緑色のドットが配置されます。彼の名前の前に、あなたが現在この男とチャットしていることを示す管理者を示します.管理者がそれらをクリックすると、そのクライアントリストのさまざまな領域に複数のドットが配置されます.管理者が彼が誰と話していたかを覚えやすくする.
問題は、アプリを実行し、最初のクライアントが clientlist に到着した場合です。彼の名前をクリックすると、チャットページに移動します (問題ありません)。戻ると、その前に緑色のドットが表示されます。しかし、 clientlist アクティビティで 3 人目が到着し、clientlist が彼を追加します (最初の 1 つだけをクリックしたことを思い出してください。つまり、0 の位置にある clientlist の最初の項目の前にドットが表示されます)。私の緑色のドットは位置 0 から下に移動します。位置 1 に自動的に移動します。
なぜこれが起こっているのかわかりません。
以下は、IP が通知として clientlist アクティビティに送信される方法です。
Intent i=new Intent("android.intent.action.GET_IP").putExtra("ClientIp", ip);
this.sendBroadcast(i);
clientlist アクティビティでそれを受け取り、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();
}
管理者が clientlist アクティビティでクライアント名をクリックすると、リストビューの位置が次のアクティビティに送信されます。次のアクティビティ (チャットページ) では、他の管理者がすでにそのクライアントと話しているかどうかがチェックされ、true の場合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 に自動的に変更されます。 .