单击 Sqlite 中的 List Item 并根据列表显示相关列
Click on List Item from Sqlite and show related column based on list
我有一个如下所示的 Sqlite table。
我用 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 Activity 中,我使用下面的方法获取值
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)。
- 也就是说,如果您单击“字母”,您将通过意图传递 0,单击“数字”,它将传递 1,如果你点击 Word 它将通过 2.
您要传递的是单击视图的值(字母数字或单词),然后将其用于 SELECT 相应的行。
- 您将永远无法可靠地获得 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 列的不同值(根据样本数据,字母、数字或单词)。
要获得您想要的值,您需要在 SwipeNav activity 中进行查询,例如
SELECT 来自 MyData 的名称 HEADER = 'the_value_from_ID_EXTRA'
其中 the_value_from_ID_EXTRA 将替换为使用传递给 SwipeNav activity.[=13] 的密钥 ID_EXTRA 从 intent extras 中提取的值=]
注意以上代码为in-principle代码,未经测试或运行因此可能存在一些错误。
我有一个如下所示的 Sqlite table。
我用 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 Activity 中,我使用下面的方法获取值
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)。
- 也就是说,如果您单击“字母”,您将通过意图传递 0,单击“数字”,它将传递 1,如果你点击 Word 它将通过 2.
您要传递的是单击视图的值(字母数字或单词),然后将其用于 SELECT 相应的行。
- 您将永远无法可靠地获得 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 列的不同值(根据样本数据,字母、数字或单词)。
要获得您想要的值,您需要在 SwipeNav activity 中进行查询,例如
SELECT 来自 MyData 的名称 HEADER = 'the_value_from_ID_EXTRA'
其中 the_value_from_ID_EXTRA 将替换为使用传递给 SwipeNav activity.[=13] 的密钥 ID_EXTRA 从 intent extras 中提取的值=]
注意以上代码为in-principle代码,未经测试或运行因此可能存在一些错误。