Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据在ListView中单击的项目位置执行活动的线程_Java_Android_Multithreading_Listview_Android Activity - Fatal编程技术网

Java 根据在ListView中单击的项目位置执行活动的线程

Java 根据在ListView中单击的项目位置执行活动的线程,java,android,multithreading,listview,android-activity,Java,Android,Multithreading,Listview,Android Activity,好吧,这就是我的问题所在。我正在开发一个简单的消息传递客户端,类似于Android设备上的OEM客户端 我目前有一个ConversationList.java,其中包含一个列表视图,其中包含实际用户与之进行对话的人的用户名 我想启动一个ConversationThread.java的特定线程(这是一个包含另一个保存用户之间交换的消息的列表视图的活动) 我最初考虑在ConversationList.java中每次添加一个对话时实例化一个新的ConversationThread,然后将其添加到数组列

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

我目前有一个
ConversationList.java
,其中包含一个列表视图,其中包含实际用户与之进行对话的人的用户名

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

我最初考虑在
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) */
        }
    });

}
公共类会话列表扩展活动
{
ArrayList ListOfActiveThreads=新的ArrayList();
列表视图列表;
阵列适配器;
ArrayList ActiveConversations=新建ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u conversation\u list);
convalist=(ListView)findViewById(R.id.Conversations);
按钮addcorva=(按钮)findviewbyd(R.id.Talk);
adapter=new ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,ActiveConversations);
convalist.setAdapter(适配器);
AddConva.setOnClickListener(新的OnClickListener()
{
public void onClick(视图v)//将要发送到的人添加到活动对话列表中
{
EditText person2add=(EditText)findViewById(R.id.Friend2Sendo);
字符串person=person2add.getText().toString();
ConversationThread newMessage=新ComversationThread(个人);
添加(newMessage);
添加(人);
adapter.notifyDataSetChanged();
person2add.setText(“”);
}
});
convalist.setOnItemClickListener(新的ListView.OnItemClickListener(){
@凌驾
公共视图单击(自适应视图a、视图v、内部i、长l)
{
Intent maintent=new Intent(ConversationList.this,ConversationThread.class);//每次都会启动ConversationThread类的一个新实例
星触觉(主旨);
/*在这里,我想启动或恢复ConversationThread.getposition(I)*/
}
});
}

我的问题是,对于
ConversationList.java
我有一个基本的android活动模板,带有一个
oncreate()
class等。我是否使该类实现可运行,并以某种方式使其像Java中的线程一样运行?或者是否有更好的方法来创建ListView使用的运行活动列表。

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

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

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