当使用兼容性库转换为Fragments时,如何处理ListActivity / MapActivity?

我正在使用兼容性库将现有的应用程序转换为Fragments API。 我读过你应该更新扩展活动现在使用FragmentActivity的类。 在大多数情况下,这是好的,但扩展ListActivity或MapActivity的类又如何呢? 什么是处理这个问题的首选方法? 我希望有一个ListFragmentActivity或类似的东西,但我没有看到一个。

Solutions Collecting From Web of "当使用兼容性库转换为Fragments时,如何处理ListActivity / MapActivity?"

有一个ListFragment: http : //developer.android.com/reference/android/app/ListFragment.html

对于MapActivity,不幸的是你需要继续使用它; 没有Fragment API。

这是我将ListActivity转换为片段API时的操作:

  1. replacelv = getListView();lv = (ListView) findViewById(android.R.id.list);

  2. replacesetListAdapter(adapter);lv.setAdapter(adapter);

  3. 如果你有覆盖onListItemClick() ,用lv.setOnItemClickListener(new ListView.OnItemClickListener() {...

  4. 你必须手动设置空的视图(显示没有结果的时候): lv.setEmptyView(findViewById(android.R.id.empty));

    如果我使用CursorLoader,我通常把它放在onLoadFinished()中:

     // if there are no results if (data.getCount() == 0) { // let the user know lv.setEmptyView(findViewById(android.R.id.empty)); } else { // otherwise clear it, so it won't flash in between cursor loads lv.setEmptyView(null); } 
  5. 说到光标加载器 ,如果还没有到那个地步,我也会把这个活动转换成使用CursorLoader

至less为ListActivity您可以将其更改为FragmentActivity(仍然实现OnItemCLickListener)并replace:

lv = getListView()到lv =(ListView)findViewById(R.id.your_list_view_id)

setListAdapter(favAdapter)到lv.setAdapter(adapter)

可以将ListActivity转换为FragmentActivity

  1. 扩展FragmentActivity而不是ListActivity
  2. android:id="@+id/your_activity_list_view"创build一个空的ListView res/layout/your_activity.xml android:id="@+id/your_activity_list_view"
  3. 在你的活动的onCreatesetContentView(R.layout.your_activity);
  4. 还要更改您的活动的onCreate以显式检索您刚膨胀的ListView

 ListView lv = (ListView) findViewById(R.id.your_activity_list_view); lv.setAdapter(adapter); lv.setOnItemClickListener(this);