java - 根据在 ListView 中单击的项目位置执行 Activity 的线程

标签 java android multithreading listview android-activity

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

我目前有一个 ConversationList.java,其中包含一个 ListView,其中包含实际用户正在与之对话的人员的用户名。

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

我最初的想法是在 ConversationList.java 中每次添加对话时实例化一个新的 ConversationThread,然后将其添加到数组列表中。然后根据 ListView 上 onItemClick 上引用 ConversationThread 的 ArrayList 位置的位置参数,执行 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 Activity 模板,带有 oncreate() 类等。我是否使该类实现 Runnable 和不知何故让它像Java中的线程一样?或者是否有更好的方法来创建 ListView 使用的正在运行的 Activity 列表。

最佳答案

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

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

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

关于java - 根据在 ListView 中单击的项目位置执行 Activity 的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16204360/

相关文章:

multithreading - 一般与信号量会合

android - 将 spanned 转换为 spannable

java - 如何将Windows命令输出写入文件?

java - 从数组列表中删除时java中的当前修改异常

java - Collections.synchronizedMap(new LinkedHashMap());没有使 Map 线程安全

android - Eclipse 开发困境

android - RecyclerView中notifyDataSetChanged更新数据的问题

c# - 如何在两个不同的线程上等待一个任务?

java - 无法在java中设置线程名称

java - Hamcrest Matchers - 断言列表类型