Android 在片段中设置listadapter
我有一个片段Tab1Fragment,它扩展了fragment类(因此我不能扩展ListActivity,这是调用setListAdapter方法所必需的)。在这个片段中,我想显示一个用自定义对象填充的listview 有没有一种方法可以在不将扩展类更改为ListFragment的情况下设置适配器?问题在于setListAdapter方法(这里用#标记) 以下是片段代码:Android 在片段中设置listadapter,android,android-listview,android-fragments,Android,Android Listview,Android Fragments,我有一个片段Tab1Fragment,它扩展了fragment类(因此我不能扩展ListActivity,这是调用setListAdapter方法所必需的)。在这个片段中,我想显示一个用自定义对象填充的listview 有没有一种方法可以在不将扩展类更改为ListFragment的情况下设置适配器?问题在于setListAdapter方法(这里用#标记) 以下是片段代码: public class Tab1Fragment extends Fragment { private Arra
public class Tab1Fragment extends Fragment {
private ArrayList<MobileNETDistinctChatInfo> m_parts = new ArrayList<MobileNETDistinctChatInfo>();
private Runnable viewParts;
private MobileNETDistinctChatInfoAdapter m_adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
MobileNETDBHandler db = new MobileNETDBHandler(getActivity());
// instantiate Adapter class
m_adapter = new MobileNETDistinctChatInfoAdapter(getActivity(), R.layout.chatlist_list_item, m_parts);
setListAdapter(m_adapter); # HERE
// Thread, which fetches data in the background
viewParts = new Runnable(){
public void run(){
handler.sendEmptyMessage(0);
}
};
Thread thread = new Thread(null, viewParts, "MagentoBackground");
thread.start();
return (LinearLayout) inflater.inflate(R.layout.tab1, container, false);
}
private Handler handler = new Handler()
{
public void handleMessage(Message msg)
{
m_parts.add(new MobileNETDistinctChatInfo("someone@gmail.com","Message1", "2013-01-01 11:11:11"));
m_parts.add(new MobileNETDistinctChatInfo("someonelse@gmail.com","Message2", "2013-01-01 11:11:11"));
m_parts.add(new MobileNETDistinctChatInfo("someonelselse@gmail.com","Message3", "2013-01-01 11:11:11"));
m_adapter = new MobileNETDistinctChatInfoAdapter(getActivity(), R.layout.chatlist_list_item, m_parts);
// display the list.
setListAdapter(m_adapter); # HERE
}
};
}
像
public class Tab1Fragment extends ListFragment {
}
像
public class Tab1Fragment extends ListFragment {
}
您需要获取对要填充的ListView对象的引用。
看看你的代码,我相信它是在你正在膨胀的线性布局中定义的,所以就这么做吧
LinearLayout l = (LinearLayout) inflater.inflate(R.layout.tab1, container, false);
ListView list = (ListView) l.findViewById(R.id.my_listview_id);
list.setAdapter(m_adapter);
如果以后要进行修改,可以将列表视图存储在字段中。您需要获取对要填充的ListView对象的引用。
看看你的代码,我相信它是在你正在膨胀的线性布局中定义的,所以就这么做吧
LinearLayout l = (LinearLayout) inflater.inflate(R.layout.tab1, container, false);
ListView list = (ListView) l.findViewById(R.id.my_listview_id);
list.setAdapter(m_adapter);
如果以后需要进行修改,可以将列表视图存储在字段中。您可以通过扩展BaseAdapter来创建自定义列表视图类,而无需更改android中的任何扩展类。 以下是此应用程序的示例代码:
public class Simple_Fragment extends Fragment
{
class MyAdapter extends BaseAdapter {
// here you adpter methods and impelement what do you want
}
}您可以通过扩展BaseAdapter来创建自定义列表视图类,而无需更改android中的任何扩展类。 以下是此应用程序的示例代码:
public class Simple_Fragment extends Fragment
{
class MyAdapter extends BaseAdapter {
// here you adpter methods and impelement what do you want
}
}您可以将活动扩展到
ListFragment
,其工作原理与ListActivity
相同
或者您必须按如下方式设置列表适配器:
ListView mListView = (ListView)findViewById(R.Id.your_list_view);
设置列表适配器
mListView.setAdapter(YOUR_LIST_ADAPTER);
您可以将活动扩展到
ListFragment
,其工作原理与ListActivity
相同
或者您必须按如下方式设置列表适配器:
ListView mListView = (ListView)findViewById(R.Id.your_list_view);
设置列表适配器
mListView.setAdapter(YOUR_LIST_ADAPTER);
ListView
添加到布局tab1.xml
中,并为该列表提供id。例如:myu列表
Tab1Fragment
中的onCreateView()方法更新为:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
LinearLayout view = (LinearLayout) inflater.inflate(R.layout.tab1, container, false);
ListView list = (ListView)view.findViewById(R.id.my_list);
MobileNETDBHandler db = new MobileNETDBHandler(getActivity());
// instantiate Adapter class
m_adapter = new MobileNETDistinctChatInfoAdapter(getActivity(), R.layout.chatlist_list_item, m_parts);
list.setListAdapter(m_adapter); # HERE
// Thread, which fetches data in the background
viewParts = new Runnable(){
public void run(){
handler.sendEmptyMessage(0);
}
};
Thread thread = new Thread(null, viewParts, "MagentoBackground");
thread.start();
return view;
}
ListView
添加到布局tab1.xml
中,并为该列表提供id。例如:myu列表
Tab1Fragment
中的onCreateView()方法更新为:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
LinearLayout view = (LinearLayout) inflater.inflate(R.layout.tab1, container, false);
ListView list = (ListView)view.findViewById(R.id.my_list);
MobileNETDBHandler db = new MobileNETDBHandler(getActivity());
// instantiate Adapter class
m_adapter = new MobileNETDistinctChatInfoAdapter(getActivity(), R.layout.chatlist_list_item, m_parts);
list.setListAdapter(m_adapter); # HERE
// Thread, which fetches data in the background
viewParts = new Runnable(){
public void run(){
handler.sendEmptyMessage(0);
}
};
Thread thread = new Thread(null, viewParts, "MagentoBackground");
thread.start();
return view;
}
为什么你不想使用ListFragment?@DavidSaint:我更新了我的问题。你不能扩展“ListActivity”,这是真的。但是您肯定可以扩展“ListFragment”。我尝试了扩展ListFragment,但是getItem()方法(见上文)存在问题,该方法返回Fragment类型的对象。由于Tab1Fragment将扩展ListFragment(反过来扩展Fragment),因此该方法不会将其视为Fragment类型的对象。为什么不使用ListFragment?@DavidSaint:我更新了我的问题。您不能扩展“ListActivity”,这是真的。但是您肯定可以扩展“ListFragment”。我尝试了扩展ListFragment,但是getItem()方法(见上文)存在问题,该方法返回Fragment类型的对象。由于Tab1Fragment会扩展ListFragment(反过来,ListFragment会扩展Fragment),因此该方法不会将其视为Fragment类型的对象。