我正在构建一个使用制表符的Activity,它也可以水平滑动。我也使用Actionbar Sherlock(ABS)来实现3.0之前的兼容性。
我在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));
如果列表项是String,这可以正常工作,但我的listview项恰好有两个字符串加上一个图像。所以我尝试更改代码以使用我的自定义类,如下所示:
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还包含一个getView()函数,用于从MyItem中提取正确的字段并对my_list XML进行充气。
问题:看起来上述更改应该有效,但是示例中调用setListAdapter()的类是静态声明的,而MyItemAdapter调用getSystemService(),这不是静态的。结果是我收到错误:
Cannot make a static reference to the non-static method getSystemService(String)
我尝试使调用函数非静态,但这似乎打破了示例代码。
任何想法如何解决这个问题?我感谢任何帮助!
答案 0 :(得分:2)
我找到了问题的答案。由于调用类实际上在Fragment中,我只需要更改
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
到
getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
我是Fragments的新手,所以我猜这是一个常见的错误。感谢。