【问题标题】:Fragment onListItemClick片段 onListItemClick
【发布时间】:2012-12-10 23:22:34
【问题描述】:

当我点击项目时我的onListItemClick永远不会被调用,类是扩展片段而不是listfragment,因为我在这个片段中有其他视图项目不是列表,那么如何在类扩展片段中实现onlistitemclick?

public class MainFiles extends Fragment 
{
    ArrayList<String> items;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    {
        View view = inflater.inflate(R.layout.files, container, false);

        Button button_up = (Button) view.findViewById(R.id.button_up);
        items = new ArrayList<String>();

        MyAdapter adapter = new MyAdapter(getActivity(), R.layout.row, items);
        ListView myList = (ListView) view.findViewById(R.id.list);
        myList.setAdapter(adapter);

        return view;
    }

    public void onListItemClick(ListView l, View v, int position, long id) 
    {

    }
}

【问题讨论】:

    标签: android listview android-fragments onclick fragment


    【解决方案1】:

    明确地将OnItemClickListener 添加到您的ListView

    myList.setOnItemClickListener(this);
    

    您还必须确保您的 Fragment 实现了 OnItemClickListener 类型:

    public class MainFiles extends Fragment implements OnItemClickListener
    

    另一种方法是创建OnItemClickListener 的专用子类以传递给ListView

    myList.setOnItemClickListener(new MyOnItemClickListener());
    
    /* ... */
    
    private class MyOnItemClickListener implements OnItemClickListener {
    
        /* ... */
    
    }
    

    【讨论】:

    • 不!请您不必实现该接口!我已经看到这个概念错误有一段时间了。 Fragment 与 OnItemClickListener 无关,因此从概念上看它是错误的。正确的方法是在适当的位置创建一个 OnItemClickListener。我强烈建议您了解更多关于实现接口的内容和时间,这是 OOP 中的一个基本概念。
    • @FabricioPH 像这样?请注意,答案已经快两年了,OP 暗示他想以第一种方式进行。
    • @NiekHaarman 是的,这样更好。但除了他想怎么做之外,它在概念上是错误的,不是很好的 OOP。您的第一个解决方案肯定会奏效,但让开始学习 OOP 的人以这种方式使用它是不对的,因为它在概念上是错误的。 MainFiles 类不应被视为 OnItemClickListener,这是我的主张。
    【解决方案2】:

    你忘记设置 setOnItemClickListener

    myList.setAdapter(adapter); 之后添加:

    myList.setOnItemClickListener(new OnItemClickListener(){
        public void onItemClick(AdapterView<?> parent, View view, int position,long id){
            new File(items.get(position));
            fileList(path.get(position));
            showPath(current_path);                 
        }
    });
    

    【讨论】:

    • 我已经发布了相同的答案,无论如何我都会 +1 :)
    【解决方案3】:

    我在这样的片段中实现了监听器

    public class DetailsFragment extends Fragment implements OnItemClickListener {
    
        private ListView listView;
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View root = inflater.inflate(R.layout.fragment_details, container, false);
    
            // list view
            listView = (ListView) root.findViewById(R.id.listView);
            listView.setListAdapter(new DetailsAdapter(getActivity(), list));
            listView.setOnItemClickListener(this);
    
            return root;
        }
    
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            // handle click here
        }
    
    }
    

    【讨论】:

      【解决方案4】:

      你的片段必须扩展 ListFragment,如果你的布局有一个 id=android:id/list 的列表视图,你的布局中可以有更多的东西而不是列表

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多