[英]Execute a thread of an activity based on item position clicked in ListView
好的,这是我遇到的问题。 我正在开发一个类似于Android设备上的OEM的简单消息传递客户端。
我目前有一个ConversationList.java
其中包含一个ListView以及与实际用户进行对话的人员的用户名。
我要启动ConversationThread.java
特定线程(这是一个活动,其中包含另一个保存用户之间交换的消息的ListView)。
我最初考虑的是在ConversationList.java
每次添加ConversationThread
时实例化一个新的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中的Thread一样起作用? 或者有没有更好的方法来创建要由ListView使用的正在运行的活动的列表。
简短的答案是,您不会。 将ListFragments用于列表,并在onItemClick中在它们之间切换。 这使您可以实现接口以在活动和片段(或片段到片段)之间“对话”。 要通过UI线程进行网络操作或进行任何密集处理,请使用Loader 。 加载程序完成后,调用您在Activity和Fragments上实现的接口回调,以将结果传递到需要的地方。
查看“活动”和“片段”教程,以更好地了解如何/何时/最佳做法。 对于新开发者来说,有些细微的差异可能会令人困惑。
这是有关Fragments的教程。 这将为您提供我上面提到的实现示例:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.