2011-06-27 5 views
15

互換性ライブラリを使用して既存のアプリケーションをFragments APIに変換しています。 Activityを拡張するクラスを更新して、FragmentActivityを使用するはずだと読んだことがあります。ほとんどの場合、これは問題ありませんが、ListActivityやMapActivityを拡張するクラスはどうでしょうか?これを処理するのに好ましい方法は何ですか?私は、ListFragmentActivityやそれらの行に沿ったものがあることを期待していましたが、私はそれを見ません。互換ライブラリを使用してFragmentsに変換する際のListActivity/MapActivityについて

答えて

5

ListFragmentがあります:MapActivityについてはhttp://developer.android.com/reference/android/app/ListFragment.html

は、残念ながらあなたはそれを使用し続ける必要があります。そのためのフラグメントAPIはありません。

+2

ListFragmentはFragmentActivityではないため、FragmentActivityが必要な継承構造に問題があります。私がこの作業を進めるにつれ、クラスの種類やGoogleの主張どおりのマイナーな調整だけでなく、全体の書き換えが必要になるようです。 – CACuzcatlan

+2

@CACuzcatlan: "Google"が必要とするのは「クラスの種類とマイナーな調整を更新するだけです」というリンクを引用することができます。つまり、 'ListActivity'を' ListFragment'に変換することは、ほとんどのactivity-> fragmentマイグレーションIMHOよりも単純で簡単です。 – CommonsWare

+0

申し訳ありませんが、私は誇張しています。私はそれが私の印象だったと言わなければなりません。 – CACuzcatlan

8

少なくともListActivityのためのあなたはFragmentActivity(まだOnItemCLickListenerを実装する)に変更し、置き換えることができます。

LV = getListView()=(リストビュー)をのlvするfindViewById(R.id.your_list_view_id)を

そして

setListAdapter(favAdapter)lv.setAdapter(アダプタ)に

+2

ListViewのIDが@ android:id/list'、これを行うことができます: 'ListView lv =(ListView)findViewById(android.R.id.list);'。また、 'onListItemClick()'を 'lv.setOnItemClickListener(新しいListView.OnItemClickListener(){}'に置き換えたいと思います。 – bmaupin

+1

私は@bmaupinの答えにこれをコメントしましたが、 "(ListView)findViewById(R.id.your_list_view_id)"と "getListView()。setAdapter(adapter)"を使ってそれらの世話をするか、それともうまくいかないのでしょうか? – ankushg

+0

@Ankushも機能しますが、あなたはgetListView()を呼び出すたびにビュー階層を検索しますが、効率はあまり高くありません。 –

12

これは、断片のAPIにListActivityを変換するとき、私は何をすべきかです:

  1. (あなたは空のビューを設定する必要がありますlv.setOnItemClickListener(new ListView.OnItemClickListener() {...

  2. に置き換える、あなたはonListItemClick()を上書きした場合はlv.setAdapter(adapter);

  3. setListAdapter(adapter);を交換しlv = (ListView) findViewById(android.R.id.list);

  4. lv = getListView();を交換して表示されていること結果がない場合は手動):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

ListViewを返したFragmentActivityに新しいメソッドgetListView()を追加すれば十分ですかそのアクティビティにsetAdapter(アダプタ)を呼び出した別のメソッドsetListAdapter(アダプタ)を追加しますか? – ankushg

+0

あなたのソリューションは完全に動作しました、それを共有してください! – vinidog

+0

@Ankushも動作します。 getListView()を呼び出すたびにビュー階層を作成しますが、これはわずかに効率が悪いです。 –

0

ListActivityFragmentActivityに変換することは可能です。

  1. FragmentActivity代わりのListActivity
  2. setContentView(R.layout.your_activity);
  3. また、明示的にちょうどListViewにあなたを取得するために、あなたの活動のonCreateを変更する、あなたの活動のonCreateandroid:id="@+id/your_activity_list_view"
  4. と空ListViewres/layout/your_activity.xmlの作成を拡張します膨らんだ

ListView lv = (ListView) findViewById(R.id.your_activity_list_view); 
lv.setAdapter(adapter); 
lv.setOnItemClickListener(this); 
関連する問題