列表未在R.java中创建

时间:2014-02-12 20:53:42

标签: android actionbarsherlock r.java-file roboguice android-annotations

当我尝试将适配器设置为像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>

我错过了什么?

3 个答案:

答案 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。