繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM