当我尝试将适配器设置为像list.setAdapter(adapter);
这样的列表时,我得到一个异常,因为在FromPageActivity.java的执行行中list是null。如果我的理解是正确的,因为我使用的是Roboguice,@ ViewById应该在R.java中初始化它。
FromPageActivity.java
@RoboGuice
@EActivity(R.layout.from_page)
public class FromPageActivity extends SherlockListActivity {
@ViewById ListView list;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
"Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
"Linux", "OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux",
"OS/2", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2",
"Android", "iPhone", "WindowsMobile" };
final List<String> ls = (List<String>)Arrays.asList(values);
final StableArrayAdapter adapter = new StableArrayAdapter(this, android.R.layout.simple_list_item_1, (List<String>) ls);
list.setAdapter(adapter);
}
StableArrayAdapter:
public class StableArrayAdapter extends ArrayAdapter<String> {
HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();
public StableArrayAdapter(Context context, int textViewResourceId,
List<String> objects) {
super(context, textViewResourceId, objects);
for (int i = 0; i < objects.size(); ++i) {
mIdMap.put(objects.get(i), i);
}
}
@Override
public long getItemId(int position) {
String item = getItem(position);
return mIdMap.get(item);
}
@Override
public boolean hasStableIds() {
return true;
}
}
from_page.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:text="@string/hello" />
</LinearLayout>
我错过了什么?
答案 0 :(得分:2)
您应该使用以下命令设置ListView的ID:
android:id="@+id/list"
+符号表示这是在应用程序命名空间中定义的新资源,即添加到R.java。你现在有什么:
android:id="@android:id/list"
...指的是Android框架中的预定义ID。
答案 1 :(得分:1)
有一种说法,如果你不能在R.Java中创建文件,那就意味着XML存在问题。
如果你查看你的listview,你有“android:id =”@ android:id / list“,这应该是
"@+id/your_idname".
希望这可以解决问题。
如果它还没有工作,请让我!!
答案 2 :(得分:0)
@ViewById不是RoboGuice注释。看起来你正在混合你的库。你想要@InjectView。