单击Sqlite中的List Item并根据列表显示相关列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单击Sqlite中的List Item并根据列表显示相关列相关的知识,希望对你有一定的参考价值。
我有一个像下面的Sqlite表。
我用rawQuery制作了一个列表:SELECT HEADER FROM MyData GROUP BY HEADER
ArrayAdapter arrayAdapter;
ArrayList<String> listItem = new ArrayList<>();
final ListView listView = (ListView) view.findViewById(R.id.list);
SQLiteDatabase sqLiteDatabase =
SqliteDatabase.getInstance(this.getContext()).getWritableDatabase();
Cursor cursor = sqLiteDatabase.rawQuery("SELECT HEADER FROM MyData GROUP BY
HEADER", new String[]{});
if (cursor.getCount() == 0) {
Toast.makeText(getActivity(), "No Data to show",
Toast.LENGTH_LONG).show();
} else {
while (cursor.moveToNext()) {
listItem.add(cursor.getString(0));
}
arrayAdapter = new ArrayAdapter<>(getActivity(),
android.R.layout.simple_list_item_1, listItem);
listView.setAdapter(arrayAdapter);
清单显示如下:
Letter
Number
Word
我的问题是,当我点击列表项目假设(Letter
),SwipeViews显示A
,
当点击Number
SwipeViews显示B
和
点击Word
时,SwipeViews显示C
我想得到,when I will click on Letter, SwipeViews will show only A,B,C
when I will click on Number, SwipeViews will show only 1,2,3
when I will click on Word, SwipeViews will show only Apple, Orange and Banana
这是OnClickListener
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i,
long l) {
Intent intent=new Intent(getActivity(), SwipeNav.class);
intent.putExtra(ID_EXTRA, String.valueOf(l));
startActivity(intent);
}
});
这是来自寻呼机适配器
public class MyPagerAdapter extends FragmentStatePagerAdapter {
private Context context;
public MyPagerAdapter(FragmentManager fm, Context context) {
super(fm);
this.context= context;}
@Override
public Fragment getItem(int i) {
ArrayList<String> listItem = new ArrayList<String>();
SQLiteDatabase sqLiteDatabase =
SqliteDatabase.getInstance(context).getWritableDatabase();
Cursor cursor = sqLiteDatabase.rawQuery("SELECT NAME FROM MyData", new
String[]{});
if (cursor.getCount() == 0) {
} else {
while (cursor.moveToNext()) {
listItem.add(cursor.getString(0));
}
}
Object[] mStringArray = listItem.toArray();
Fragment fragment = new AFragment();
Bundle args = new Bundle();
args.putString(AFragment.ARG_OBJECT, (String)mStringArray[i]);
fragment.setArguments(args);
return fragment;
}
在SwipeNav活动中,我使用下面的内容来获取价值
if (getIntent().hasExtra(ListNavAdapter.ID_EXTRA)){
String myInt = getIntent().getStringExtra(ListNavAdapter.ID_EXTRA);
listSwipePagerAdapter = new ListSwipePagerAdapter(getSupportFragmentManager(),this);
viewPager = (ViewPager) findViewById(R.id.pager);
viewPager.setAdapter(listSwipePagerAdapter);
您的问题似乎是您正在使用l,期望它是id。除非使用CursorAdapter,否则它将是位置(与除long之外的第3个参数相同)。
- 也就是说,如果你点击Letter,你将通过意图传递0,点击数字,它将通过1,如果你点击Word,它将通过2。
您要传递的是所单击视图(字母数字或单词)的值,然后使用它来选择相应的行。
- 您永远无法可靠地获取id,因为ArrayList中没有这样的值。
因此,而不是你想要的intent.putExtra(ID_EXTRA, String.valueOf(l));
intent.putExtra(ID_EXTRA, ((String)adapterView.getItem(i)));
或者
intent.putExtra(ID_EXTRA,((TextView) view).getText().toString());
注意列表中的值,即Header列的不同值(字母,数字或Word根据示例数据)。
然后在SwipeNav活动中获取您想要的值,您需要一个查询,例如
从MyData中选择名称WHERE HEADER ='the_value_from_ID_EXTRA'
- 其中the_value_from_ID_EXTRA将替换为使用传递给SwipeNav活动的密钥ID_EXTRA从intent extras中提取的值。
- 请注意,上面的代码是原则上的代码,它尚未经过测试或运行,因此可能会出现一些错误。
以上是关于单击Sqlite中的List Item并根据列表显示相关列的主要内容,如果未能解决你的问题,请参考以下文章
没有为类型“Future<List<Item>>”定义吸气剂“长度”
如何从列表视图中从 sqlite 检索数据单击并查看不同的活动 android studio