0

一般的なシナリオがありますが、それを処理する方法がわかりませんでした。

各アイテムが異なるクリック可能なビューを持つ ListView があります。そのうちの 1 つは、アイテムのユーザー名の横にフレンド ボタンとして追加されます。

したがって、ListViewAdapter の getView() で、このボタンの onClick をこの方法で実装しました。

onClick(){

//make the button invisible, for UX
//change the value of is_friend = 1, in the Adapter ArrayList, which will be helpful when listView is scrolled and getView is called again, to make it visible or invisible.
//Send the info to the server as an AsyncTask
}

これはうまくいきます。

問題:

[友達として追加] ボタンをクリックする代わりに、ユーザー名をクリックして彼のプロフィールに移動し、そのアクティビティの [友達として追加] ボタンをクリックすることができます。

ListView に戻ると、アダプター ArrayList にはサーバーから取得した古いデータがあり、それらを変更していないため、[友達として追加] ボタンがまだ表示されています。

ユーザー名 がクリックされたときのStartActivityForResultを考えました。しかし、 add as friendをクリックするとすぐに ListView に戻らないかもしれません。ユーザーのプロファイルには他にも多くのアクションがあります。

多くのアプリで簡単に処理できるおなじみのケース。これがどのように行われるかについて何か考えはありますか?

ありがとうございました

編集:

以下の答えは機能しますが。それらは最善の方法ではありません。

したがって、より良い方法は、listViewAdapter の静的メソッドを呼び出して、ArrayList でのみその値を更新することでしょうか??

4

1 に答える 1

0

gsingh2011 さんのコメントは有効です。ただし、あなたの発言は「サーバーにクエリを実行してArrayListにデータを入力しますが、頻繁に実行したくありません」のようなものになると思います。

より一般的に言えば、gsingh のコメントは次のように言い換えることができます。アダプターと「ViewProfileActivity」は同じデータに基づいている必要があります。これを行うには、2 つの間で ArrayList を共有します (静的メンバー、パブリック メンバー、または必要なものとして)。次に、「ViewProfileActivity」から何かを変更すると、ListView に切り替えると自動的に更新されます (アダプターで getView() が再度呼び出され、新しいデータに基づいてビューが生成されるため)。

上記のテキストはあなたの質問への回答ですが、いくつかの他のコメントを追加さ​​せてください。

  • asynctask でサーバーに情報を送信しているとします。これを (Intent)Service を使用するように変更する必要があります。アクティビティがバックグラウンドに置かれたときにデータが完全に送信されるという保証はありません。このサーバー同期をサービスに委任すると、送信が完了するまでプロセスが十分に長く維持されます。
  • そのサービスを取得したら、上記で説明したように、「共有データ」を配置するのに適した場所になります。そのために小さなデータベースを使用して、サービスにローカル データベースとリモート サーバー間の同期のみを処理させることもできます。次に、デバイスがリモート データをローカルにキャッシュする REST 実装のように見え始めますが、最終的にはリモート サーバーの状態を視覚化するだけです。REST サーバーの取り扱いに関する優れた google i/o プレゼンテーションを参照できます。このプレゼンテーションは、REST の部分に興味がない場合にも役立ちます。なぜなら、(おそらくもっと重要なことに) データの永続性を確実に維持したい場合に考慮しなければならないことを示しているからです。
于 2012-12-12T08:01:36.223 に答える