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

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

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

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

这是我在将ListActivity转换为片段API时所做的事情:

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

  2. 替换setListAdapter(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,如果还没有那么

至少对于ListActivity,您可以将其更改为FragmentActivity(仍在实现OnItemCLickListener)并替换:

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

setListAdapter(favAdapter)到lv.setAdapter(适配器)

可以将ListActivity转换为FragmentActivity

  1. 扩展FragmentActivity而不是ListActivity
  2. 使用带有android:id="@+id/your_activity_list_view"的空ListView创建res/layout/your_activity.xml
  3. 在你的活动的onCreate中, setContentView(R.layout.your_activity);
  4. 还要更改活动的onCreate以显式检索刚刚膨胀的ListView

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