在 ListFragment 中添加 onListItemLick/onItemLongClick
Adding onListItemLick/onItemLongClick in a ListFragment
在评论中解决:
问题是由 ListFragment 中单个元素的布局中的 ImageButton
生成的,即使 focusable
元素设置为 false,它仍在窃取输入,因此我不得不将其从布局中删除。
我有一个由 SimpleCursorAdapter 的扩展 class 填充的 ListFragment(主要用于覆盖 newView 方法),但我想在用户按下(或长按)列出生成的适配器。
我已经使用 Log.d
方法尝试了 onListItemClick
和 onItemLongClick
的简单日志写入,但在这两种情况下都没有任何反应,我不知道问题出在哪里,因为代码非常简单:
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");
}
我有两个解决方案
简单地覆盖 onListItemClick
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, 位置, id);
Log.i("position",position);
}
在根布局上。添加此代码
android:descendantFocusability="blocksDescendants"
希望对您有所帮助
编辑后的答案:
也许布局的组件正在窃取布局其他组件的输入
在评论中解决:ImageButton
生成的,即使 focusable
元素设置为 false,它仍在窃取输入,因此我不得不将其从布局中删除。
我有一个由 SimpleCursorAdapter 的扩展 class 填充的 ListFragment(主要用于覆盖 newView 方法),但我想在用户按下(或长按)列出生成的适配器。
我已经使用 Log.d
方法尝试了 onListItemClick
和 onItemLongClick
的简单日志写入,但在这两种情况下都没有任何反应,我不知道问题出在哪里,因为代码非常简单:
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");
}
我有两个解决方案
简单地覆盖 onListItemClick
@Override public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, 位置, id);
Log.i("position",position);
}
在根布局上。添加此代码
android:descendantFocusability="blocksDescendants"
希望对您有所帮助
编辑后的答案: 也许布局的组件正在窃取布局其他组件的输入