1

好的,这是我遇到的问题。我正在开发一个简单的消息客户端,类似于 Android 设备上的 OEM 客户端。

我目前有一个ConversationList.java包含与实际用户进行对话的人的用户名的 ListView。

我想启动 a 的特定线程ConversationThread.java(这是一个包含另一个 ListView 保存用户之间交换的消息的活动)。

我最初考虑ConversationThread在每次添加对话时实例化一个新的ConversationList.java,然后将其添加到数组列表中。然后基于引用 ConversationThread 的 ArrayList 位置的 ListView 上的 onItemClick 上的位置参数执行 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 中的一个线程?或者有没有更好的方法来创建列表视图使用的正在运行的活动列表。

4

1 回答 1

0

简短的回答是,你没有。将ListFragments用于您的列表并在 onItemClick 中在它们之间切换。这使您能够实现接口以在您的活动和片段(或片段到片段)之间“对话”。要从 UI 线程中获取网络操作或任何密集处理,请使用Loader。加载程序完成后,调用您在 Activity 和 Fragments 上实现的接口回调,以将结果传递到需要它们的地方。

查看活动和片段教程,以更好地了解如何/何时/最佳实践。对于新开发人员来说,理解一些细微的差异可能会让人感到困惑。

这是Fragments的教程。这将为您提供我上面提到的实现示例:

于 2013-04-26T02:04:08.077 回答