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

CAC*_*lan 15 android android-fragments android-3.0-honeycomb

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

bma*_*pin 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);
    }
    
    Run Code Online (Sandbox Code Playgroud)
  5. 说到游标加载器,我还会将活动转换为使用CursorLoader,如果还没有那么


Bil*_*bon 8

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

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

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

  • 如果ListView的ID是`@android:id/list`,你可以这样做:`ListView lv =(ListView)findViewById(android.R.id.list);`.您还需要将`onListItemClick()`替换为`lv.setOnItemClickListener(new ListView.OnItemClickListener(){...` (2认同)

hac*_*bod 5

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

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

  • 谢谢,但ListFragment不是FragmentActivity,所以我的继承结构存在问题,需要FragmentActivity.我对此工作的越多,它似乎就越需要完全重写,而不仅仅是更新类类型和谷歌声称的微小调整. (2认同)
  • @CACuzcatlan:欢迎您引用一个链接,其中"Google""声称"所有您需要的只是"只更新课程类型和小调整".话虽这么说,将`ListActivity`转换为`ListFragment`非常简单,比大多数活动 - >片段迁移更简单,恕我直言. (2认同)