1

さて、ここに私が抱えている問題があります。私は、Android デバイスにある OEM に似た単純なメッセージング クライアントを開発しています。

私は現在ConversationList.java、実際のユーザーが会話をしている人のユーザー名を含む ListView を持っています。

ConversationThread.java特定のスレッド(ユーザー間で交換されるメッセージを保持する別の ListView を含むアクティビティ) を起動したいと考えています。

私は当初ConversationThread、 に会話が追加されるたびに new をインスタンス化しConversationList.java、それを配列リストに追加することを考えていました。次に、ConversationThread の ArrayList の位置を参照する ListView の onItemClick の position パラメータに基づいて、ConversationThread の特定の「スレッド」を実行します。

public class ConversationList extends Activity 
{
ArrayList<ConversationThread> ListOfActiveThreads = new ArrayList<ConversationThread>();
ListView convoList;
ArrayAdapter<String> adapter;
ArrayList<String> ActiveConversations = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_conversation_list);
    convoList = (ListView) findViewById( R.id.Conversations );
    Button addConvo = (Button) findViewById(R.id.Talk);
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, ActiveConversations);
    convoList.setAdapter(adapter);

    addConvo.setOnClickListener(new OnClickListener()  
    {
        public void onClick(View v) //will add the person to be sending to to the list of active conversations
        {
            EditText person2add = (EditText) findViewById(R.id.Friend2Sendto);
            String person = person2add.getText().toString();
ConversationThread newMessage = new ComversationThread(person);
ListOfActiveThreads.add(newMessage);
            adapter.add(person);
            adapter.notifyDataSetChanged();
            person2add.setText("");         

        }
    });

    convoList.setOnItemClickListener(new ListView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> a, View v, int i, long l) 
        {

        Intent mainIntent = new Intent(ConversationList.this, ConversationThread.class); //this starts a new instance of the ConversationThread class each time
        startActivity(mainIntent);
/* Here I want to start or resume the ConversationThread.getposition(i) */
        }
    });

}

私の質問は、クラスなどConversationList.javaを含む基本的な Android アクティビティ テンプレートがあるoncreate()ためです。このクラスに Runnable を実装させ、何らかの方法で Java のスレッドのように動作させることはできますか? または、ListView で使用される実行中のアクティビティのリストを作成するより良い方法があります。

4

1 に答える 1

0

簡単に言えば、そうではありません。リストにListFragmentsを使用し、onItemClick でそれらを切り替えます。これにより、アクティビティとフラグメント (またはフラグメントからフラグメント) の間で「対話」するためのインターフェイスを実装できます。ネットワーク操作や集中的な処理を UI スレッドから切り離すには、Loaderを使用します。ローダーが終了したら、Activity と Fragments の両方に実装したインターフェイス コールバックを呼び出して、必要な場所に結果を渡します。

アクティビティとフラグメントのチュートリアルを見て、どのように/いつ/ベスト プラクティスについて理解を深めてください。新しい開発者が微妙な違いのいくつかを理解するのは混乱する可能性があります.

これがFragmentsのチュートリアルです。これにより、上で述べたことの実装サンプルが得られます。

于 2013-04-26T02:04:08.077 に答える