0

水平方向にスワイプできるタブを使用するアクティビティを構築しています。3.0 より前の互換性のために、Actionbar Sherlock (ABS) も使用しています。

http://code.google.com/p/sherlock-demo/source/browse/#git%2Fsrc%2Fcom%2Fexample%2Fandroid%2Fsherlockdemoで Stackoverflow ユーザー Sparky から ABS を使用した FragmentTabsPager の適切な実装を見つけました。

次のようにアダプターをセットアップします。

String[] mAccts;  // source data for the list

// populate mAccts with an array of Strings ...

setListAdapter(new ArrayAdapter<String> (getActivity(),
                R.layout.simple_list_item_checkable_1,
                android.R.id.text1, mAccts));

リスト項目が文字列の場合、これは正常に機能しますが、私のリストビュー項目にはたまたま 2 つの文字列と画像が含まれています。そこで、次のようにカスタム クラスで動作するようにコードを変更してみました。

ArrayList<MyItem> mItems = new ArrayList<MyItem>();  // new source data

// populate mItems with an array of MyItems ...

setListAdapter(new MyItemAdapter(getActivity(), R.layout.my_list, mItems));

MyItemAdapter の場所

public class MyItemAdapter extends ArrayAdapter<MyItem> { ... }

MyItemAdapter には、MyItem から適切なフィールドを取り出して my_list XML を拡張するための getView() 関数も含まれています。

問題: 上記の変更は機能するはずですが、例で setListAdapter() が呼び出されるクラスは静的に宣言されており、MyItemAdapter は getSystemService() を呼び出しますが、これは静的ではありません。その結果、エラーが発生します。

Cannot make a static reference to the non-static method getSystemService(String)

呼び出し関数を非静的にしてみましたが、サンプル コードが壊れているようです。

これを修正する方法はありますか?すべての助けに感謝します!

4

1 に答える 1

2

私は自分の問題に対する答えを見つけました。呼び出しクラスは実際には Fragment 内にあるため、変更する必要がありました

getSystemService(Context.LAYOUT_INFLATER_SERVICE);

getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

Fragments は初めてなので、これはよくあるエラーだと思います。ありがとう。

于 2012-06-03T15:12:20.923 に答える