【问题标题】:Adding onListItemLick/onItemLongClick in a ListFragment在 ListFragment 中添加 onListItemLick/onItemLongClick
【发布时间】:2015-09-04 16:26:03
【问题描述】:

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

我有一个由 SimpleCursorAdapter 的扩展类填充的 ListFragment(主要用于覆盖 newView 方法),但我想在用户按下(或长按)适配器生成的列表中的项目时添加一个 AlertDialog。 我已经使用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");
    }

【问题讨论】:

  • 试试这个;将 onListItemClick 更改为 onItemClick
  • @Arrigo Pierotti...覆盖它
  • 我删除了实现onItemClick而不是onListItemClick所需的一些额外内容,而@Override只是在我复制粘贴到这里时才丢失。
  • 我在 SO 中发现了一个线程,他们遇到了类似的问题,即布局的组件窃取了其他组件的输入。检查这个,它可能对你有帮助 [stackoverflow.com/questions/7274231/…
  • @Arrigo Pierotti 欢迎......您现在可以通过接受答案来结束讨论......我在下面编辑了我之前的答案。快乐编码

标签: android android-listfragment simplecursoradapter onitemclicklistener


【解决方案1】:

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

【讨论】:

  • 我删除了实现onItemClick而不是onListItemClick所需的一些额外内容,并且@Override仅在我复制并粘贴到此处时丢失了
  • 哦,所以即使您覆盖该方法,它也不起作用?
  • 不,我编辑了问题中的代码,所以它是我在模拟器上运行的确切代码(那里有额外的东西)
  • 忘了在这里添加,我的错,但是超级在我现在正在测试的代码中
【解决方案2】:

我有两个解决方案

  1. 简单地覆盖 onListItemClick

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

      Log.i("position",position);
    

    }

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

    android:descendantFocusability="blocksDescendants"

希望对你有帮助

【讨论】:

  • 我删除了实现onItemClick 而不是onListItemClick 所需的一些额外内容,而@Override 只是在我复制并粘贴到此处时丢失了
【解决方案3】:

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

@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");
}

【讨论】:

  • 我删除了工具和 getListView,因为它们在 onItemClick 的位置,而 @override 仅在此处丢失(当我在此处复制和粘贴时,我不得不进行一些编辑)但没有任何改变,日志中仍然没有任何迹象...
  • 您忘记了超级构造函数并将其删除 -> 实现 AdapterView.OnItemClickListener
  • 超级构造函数已添加(我的不好是一开始没有在代码中添加它)但仍然无法正常工作
  • 删除实现 AdapterView.OnItemClickListener。任何 ListFragment 只需要重写 onListItemClick 方法即可使其工作
  • 对不起,我忘记在此处更改代码中的所有内容,但即使没有这个实现,它仍然无法正常工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多