在 ListFragment 中添加 onListItemLick/onItemLongClick

Adding onListItemLick/onItemLongClick in a ListFragment

在评论中解决: 问题是由 ListFragment 中单个元素的布局中的 ImageButton 生成的,即使 focusable 元素设置为 false,它仍在窃取输入,因此我不得不将其从布局中删除。

我有一个由 SimpleCursorAdapter 的扩展 class 填充的 ListFragment(主要用于覆盖 newView 方法),但我想在用户按下(或长按)列出生成的适配器。 我已经使用 Log.d 方法尝试了 onListItemClickonItemLongClick 的简单日志写入,但在这两种情况下都没有任何反应,我不知道问题出在哪里,因为代码非常简单:

public class FragmentD extends ListFragment {

private SQLiteDatabase db;

@Override
public void onActivityCreated (Bundle savedInstanceState) {

    super.onActivityCreated(savedInstanceState);

    myDatabase myDBHelper = new myDatabase(getActivity());
    db = myDBHelper.getWritableDatabase();

    Log.d("DB", "Insert fatto");

    String[] res_columns = new String[] {myDatabase.COLUMN2, myDatabase.COLUMN2,};
    String sortOrder = myDatabase.COLUMN1 + " DESC";

    String where = "*";

    Cursor testCursor = db.rawQuery("select * from " + database.DATABASE_TABLE, null);

    myAdapter adapter = new myAdapter(getActivity(),
            R.layout.list_element,
            testCursor,
            res_columns,
            new int[] { },
            0);

    setListAdapter(adapter);
}

@Override
public void onListItemClick (ListView l, View v, int pos, long id) {
    super.onListItemClick(l, v, pos, id);
        Log.d("CLICK", "pressed");
    }

添加超级构造函数并覆盖它:

@Override
public void onListItemClick (ListView l, View v, int pos, long id) {
    super.onListItemClick(l, v, pos, id);
    Log.d("CLICK", "pressed");
}

编辑:试试这个代码

public class FragmentD extends ListFragment {

private SQLiteDatabase db;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View v = inflater.inflate(YOUR LISTFRAGMENT LAYOUT HERE, container, false);

    myDatabase myDBHelper = new myDatabase(getActivity());
    db = myDBHelper.getWritableDatabase();

    Log.d("DB", "Insert fatto");

    String[] res_columns = new String[] {myDatabase.COLUMN2, myDatabase.COLUMN2,};
    String sortOrder = myDatabase.COLUMN1 + " DESC";

    String where = "*";

    Cursor testCursor = db.rawQuery("select * from " + database.DATABASE_TABLE, null);

    myAdapter adapter = new myAdapter(getActivity(),
            R.layout.list_element,
            testCursor,
            res_columns,
            new int[] { },
            0);

    setListAdapter(adapter);

    return v;
}

@Override
public void onListItemClick (ListView l, View v, int pos, long id) {
    super.onListItemClick(l, v, pos, id);
    Log.d("CLICK", "pressed");
}

我有两个解决方案

  1. 简单地覆盖 onListItemClick

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

      Log.i("position",position);
    

    }

  2. 在根布局上。添加此代码

    android:descendantFocusability="blocksDescendants"

希望对您有所帮助

编辑后的答案: 也许布局的组件正在窃取布局其他组件的输入