setOnItemClickListener无法正常工作

时间:2012-12-11 01:14:48

标签: android onclick

我无法让onItemClickListener工作。我所做的只是使用意图打开一个片段。如果我在这里做任何可疑的事,请告诉我吗?

public class MyListFragment extends ListFragment {

    private ArrayList<String> myList = null;
    private ArrayAdapter<String> myAdapter;

        @Override
        public void onActivityCreated(Bundle savedInstanceState){
            Log.d("Example:", "In Fragement Calss");
            super.onActivityCreated(savedInstanceState);

            Resources myResources = getResources();
            myList = new ArrayList<String>(Arrays.asList(myResources.getStringArray(R.array.myExamArray)));
            myAdapter = new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,myList);
            setListAdapter(myAdapter);

            ListView lv = (ListView) getActivity().findViewById(R.id.listView);
            lv.setOnItemClickListener(new OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

                Intent myIntent = new Intent(view.getContext(), DetailsFragment.class);

                startActivity(myIntent);
            }

           });

        }

}

2 个答案:

答案 0 :(得分:1)

请注意,ListView会阻止包含至少一个焦点的项目的点击次数 后代,但它不会使内容焦点可达调用 setItemsCanFocus(真)。一种解决方法是使用

禁用后代的可聚焦性
android:descendantFocusability="blocksDescendants"

在定义列表项的布局中。 (首先从http://cyrilmottier.com/2011/11/23/listview-tips-tricks-4-add-several-clickable-areas/了解到这一点,但其他一些SO帖子也指出了这一点。)你的布局是否包含按钮?如果是这样,你就属于这种情况。

答案 1 :(得分:0)

我没有看到你为这个片段夸大特定XML的位置......但是你可能引用了错误的ListView。

无论您应该使用现有的onListItemClick方法:

public class MyListFragment extends ListFragment {

    private ArrayList<String> myList = null;
    private ArrayAdapter<String> myAdapter;

    @Override
    public void onActivityCreated(Bundle savedInstanceState){
        // Remove the OnItemClickListener, but keep everything else
    }

    @Override
    public void onListItemClick (ListView l, View v, int position, long id) {
        Intent myIntent = new Intent(this, DetailsFragment.class);
        startActivity(myIntent);
    }
}