Android 片段onListItemClick

Android 片段onListItemClick,android,listview,android-fragments,onclick,fragment,Android,Listview,Android Fragments,Onclick,Fragment,我的onListItemClick在我单击item时是从不调用的,类是extends fragment而不是listfragment,因为我在这个片段中有其他视图项不是list,所以如何在类extends fragment中实现onListItemClick 阶级 public类MainFiles扩展片段 { 数组列表项; CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态) { 视图=充气机。充气(R.layout.files,container,false); But

我的onListItemClick在我单击item时是从不调用的,类是extends fragment而不是listfragment,因为我在这个片段中有其他视图项不是list,所以如何在类extends fragment中实现onListItemClick

阶级

public类MainFiles扩展片段
{
数组列表项;
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态)
{
视图=充气机。充气(R.layout.files,container,false);
Button-Button\u-up=(Button)view.findViewById(R.id.Button\u-up);
items=newarraylist();
MyAdapter=新的MyAdapter(getActivity(),R.layout.row,items);
ListView myList=(ListView)view.findViewById(R.id.list);
myList.setAdapter(适配器);
返回视图;
}
public void onListItemClick(列表视图l、视图v、整数位置、长id)
{
}
}

OnItemClickListener
显式添加到您的
列表视图中

myList.setOnItemClickListener(this);
您还必须确保您的
片段
实现了
OnItemClickListener
类型:

public class MainFiles extends Fragment implements OnItemClickListener

另一种方法是创建一个专用的
OnItemClickListener
子类,以传递给
列表视图

myList.setOnItemClickListener(new MyOnItemClickListener());

/* ... */

private class MyOnItemClickListener implements OnItemClickListener {

    /* ... */

}

您忘记设置setOnItemClickListener

myList.setAdapter(适配器)之后添加此项:

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);                 
    }
});
myList.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
新文件(items.get(position));
文件列表(path.get(position));
显示路径(当前路径);
}
});

我已经在这样的片段中实现了侦听器

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
    }

}
public类详细信息片段扩展片段实现MClickListener{
私有列表视图列表视图;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根=充气机。充气(R.layout.fragment\u详细信息,容器,错误);
//列表视图
listView=(listView)root.findViewById(R.id.listView);
setListAdapter(新的DetailsAdapter(getActivity(),list));
setOnItemClickListener(this);
返回根;
}
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//点击这里
}
}

你的片段必须扩展ListFragment,如果你的版面有一个id=android:id/list的listview,那么你的版面中除了列表之外还可以有更多的内容。

我已经发布了相同的答案,不管怎样,我将+1:)不!您不必实现该接口!我已经看到这个概念上的错误有一段时间了。片段与侦听器无关,因此从概念上讲,以这种方式看待它是错误的。正确的方法是在适当的位置创建一个监听器。我强烈建议您了解更多关于什么以及何时实现接口的信息,这是OOP中的一个基本概念。@FabricioPH类似的内容?请注意,答案几乎是两年前的,OP暗示他想用第一种方法来做。@Niekharman是的,这样更好。但是除了他想怎么做之外,这在概念上是错误的,不是很好。您的第一个解决方案肯定会起作用,但让开始学习OOP的人以这种方式使用它是不对的,因为它在概念上是错误的。我的主张是,类MainFiles不应该被视为监听器。
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
    }

}