2

我的 android 应用程序中有一个 ListFragment,我已经让它工作了,但是 OnClick 监听器没有工作,我试着让它当列表上的任何项目被选中时,一个 Toast 出现并且它没有发生,有没有错误,所以我没有要发布的 LogCat

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub

    View v = inflater.inflate(R.layout.main, container, false);

    ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();


//...

    ListAdapter adapter = new SimpleAdapter(getActivity(), menuItems,
            R.layout.list_item,
            new String[] { KEY_NAME, KEY_DESC, KEY_COST }, new int[] {
                    R.id.name, R.id.desciption, R.id.cost });

    setListAdapter(adapter);

    ListView lv = (ListView)v.findViewById(android.R.id.list);

    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // getting values from selected ListItem

            Toast.makeText(getActivity().getApplicationContext(), "Not Configured",
                    Toast.LENGTH_SHORT).show();

        }
    });

    return v;
}

谢谢

4

5 回答 5

7

如果您的类扩展了 ListFragment,那么您需要做的只是覆盖其 onListItemClick 方法。

@Override
public void onListItemClick(ListView l, View v, int pos, long id) {
  super.onListItemClick(l, v, pos, id);
  Toast.makeText(getActivity(), "Item " + pos + " was clicked", Toast.LENGTH_SHORT).show();
}
于 2013-09-24T11:09:31.173 回答
2

ListFragment类已经有了它的overriden onListItemClick方法。

医生说

This method will be called when an item in the list is selected. Subclasses should override

因此,无需为您的列表视图声明另一个列表器。

于 2013-09-24T11:18:21.710 回答
0

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

到你行中的所有项目

于 2014-11-28T01:58:15.710 回答
0

删除.getApplicationContext()应该工作。我制作的应用程序中有一些类似于您的代码。它也来自片段内部,尽管没有问题。这db.remove可能与您的代码无关,因为此代码是为具有数据库的应用程序编写的。也可以尝试更改new OnItemClickListenernew AdapterView.OnItemClickListener

    listItem.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            db.remove( (int) l);
            Toast.makeText(getActivity(), "Item Deleted", Toast.LENGTH_LONG).show();
        }
    });

如果这不起作用,也许尝试制作一个 Context 实例变量,如:

private Context ctx = getActivity();

或者

private final Context ctx = getActivity();

不过,我以前从未使用过 ListFragments,所以我不确定我写的任何东西是否会起作用。

于 2013-08-02T06:24:53.793 回答
0

确保你

1.适配器内不应该有 onclicklistener

2.在你的 XML 布局中

R.layout.main

Listview 应该像这样初始化

 <ListView
    android:onClick="@id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_below="@+id/textHeader"
    android:layout_margin="5dp"
    android:divider="@color/DeepPink"
    android:dividerHeight="1sp"
    android:gravity="center"
    android:horizontalSpacing="1dp"
    android:visibility="visible" >

这里 id android:onClick="@id/list" 重要

  1. ListView lv = getListView如果您通过 ListFragment 而不是 Fragment 扩展片段,则应该初始化 ListView
于 2015-08-03T13:41:59.807 回答