为什么我的代码在OnCreate中工作,但在OnItemClickListener中不起作用

时间:2014-08-29 13:09:19

标签: android listview oncreate onitemclicklistener

我制作并显示日历的应用,当我在一天内点击时,我想要显示ListView自定义。

我的问题是,当我使用OnCreate中的代码时,它可以正常工作,但是当我在日历的OnItemClickListener中使用它时,它什么也没做。

这是我的代码。感谢您的工作和帮助

    for(int i = 0; i < 5; i++) {
        RowItem item = new RowItem(imagesCharacter[i], imagesAnime[i], characters[i], animes[i]);

        rowItems.add(item);
    }

    CustomListViewAdapter myAdapter = new CustomListViewAdapter(getApplicationContext(),       R.layout.list_item, rowItems);
    listView.setAdapter(myAdapter);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent,
                View view, int position, long id) {
            // TODO Auto-generated method stub
            Toast toast = Toast.makeText(getApplicationContext(),
                    "Item" + (position + 1) + ": " + rowItems.get(position), Toast.LENGTH_LONG);
            toast.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);
            toast.show();
        }

    });

如果你问,我在运行应用程序时执行ListView的findViewById。

解决方案:

我发现了问题,现在可以了。

问题是ListView是一个LinearLayout的子节点,当我执行findViewById或其他不起作用的东西时总是得到或者为空。

所以我删除了de Layout,当我的findViewById工作时。

感谢您的所有答案。

2 个答案:

答案 0 :(得分:0)

而不是getApplicationContext()(应尽可能避免)使用YourActivityName.this

答案 1 :(得分:0)

通过执行以下操作创建对活动上下文的引用:

private Context mContext;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);        
    mContext = this;
}

然后将上下文引用传递给OnItemClickListener,如:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
       Toast toast = Toast.makeText(mContext, "Item" + (position + 1) + ": " + rowItems.get(position), Toast.LENGTH_LONG);
       // Other codes here. 
    }
});