单击 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代码,未经测试或运行因此可能存在一些错误。