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

时间:2011-06-27 18:15:42

标签: android android-3.0-honeycomb android-fragments

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

4 个答案:

答案 0 :(得分:12)

这是我在将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. 说到cursor loaders,我还会将活动转换为使用CursorLoader,如果它还没有到那时那么

答案 1 :(得分:8)

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

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

setListAdapter(favAdapter)到lv.setAdapter(adapter)

答案 2 :(得分:5)

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

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

答案 3 :(得分:0)

可以将ListActivity转换为FragmentActivity

  1. 扩展FragmentActivity而不是ListActivity
  2. 使用res/layout/your_activity.xml
  3. 的空ListView创建android:id="@+id/your_activity_list_view"
  4. 在您的活动的onCreatesetContentView(R.layout.your_activity);
  5. 同时更改您的活动的onCreate以明确检索您刚刚充气的ListView
  6. ListView lv = (ListView) findViewById(R.id.your_activity_list_view);
    lv.setAdapter(adapter);
    lv.setOnItemClickListener(this);