【问题标题】:Set onclicklistener to fragment将 onclicklistener 设置为片段
【发布时间】:2013-01-29 05:18:34
【问题描述】:

我有活动。在活动中,我有片段(“MyFragment”)。在片段中我有 listView。

然后在我接下来的代码中:

view.findViewById(R.id.my_fragment).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(final View v) {
        //SomeAction
    }
});

但是这个 onClick 不起作用。我认为是因为 ListView 覆盖了整个片段。

然后我设置下一个列表视图:

android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"

但它不起作用。如何制作片段来捕捉所有点击事件?

【问题讨论】:

  • 你想点击什么?列表查看项目?如果是这样,您无需执行任何操作。
  • 我正在尝试点击片段,我不想让列表视图捕捉到我的点击
  • 如果 ListView 覆盖了整个 Fragment,为什么不直接使用 ListView 的 OnItemClickListener ,因为它已经工作了,而不是努力创建另一个点击监听器?
  • @Sam - 这会起作用,但如果他只有 1 或 2 个项目,则整个片段将无法点击。就这2个项目

标签: android


【解决方案1】:

如果您的片段中只有一个 ListView,最好使用ListFragment。 OnitemClickListener 更好地集成。 你只需要覆盖 OnListItem 监听器

这里有很好的教程: http://developer.android.com/guide/components/fragments.html

这是一个例子:

public class ListMenu extends android.support.v4.app.ListFragment {

private String[] strList = { "test1", "test2", "test3", "test4" };
OnMenuSelectedListener mCallback;

public interface OnMenuSelectedListener  {
    public void onMenuSelected(int position);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    this.setListAdapter(new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_list_item_activated_1, strList));

}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);

    // This makes sure that the container activity has implemented
    // the callback interface. If not, it throws an exception.
    try {
        mCallback = (OnMenuSelectedListener) activity;
    } catch (ClassCastException e) {
        throw new ClassCastException(activity.toString()
                + " must implement OnHeadlineSelectedListener");
    }
}

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);


    mCallback.onMenuSelected(position);
    getListView().setItemChecked(position, true);
}

}

【讨论】:

猜你喜欢
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多