【问题标题】:Pass list view clicked value to another activity with shared preferences将列表视图点击值传递给具有共享首选项的另一个活动
【发布时间】:2019-10-24 00:19:43
【问题描述】:

我有三个活动。

我想将点击数据从第一个活动传递到第三个活动。

第一次(点击)>第二次(点击)>第三次

我的问题是:SwipeNavAdapter

String data1 = sharedPreferences.getString(ListNavAdapter.ID_EXTRA, "") 没有显示来自ListNavAdapter 的列表,但它显示了来自CourseAdapter 的列表。我想从SwipeNavAdapter 中的ListNavAdapter 中获取点击列表项。

FIRST : ListNavAdapter

SQLiteDatabase sqLiteDatabase = SqliteDatabase.getInstance(this.getContext()).getWritableDatabase();
Cursor cursor = sqLiteDatabase.rawQuery("SELECT CHAPTER FROM BOOK GROUP BY CHAPTER order by _id", new String[]{});

 if (cursor.getCount() == 0) {
 //
 } else {
     while (cursor.moveToNext()) {
         listItem.add(cursor.getString(0));
     }
     arrayAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, listItem);
     listView.setAdapter(arrayAdapter);
 }
listView.setOnItemClickListener(new OnItemClickListener() {
     @Override
     public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
         SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
         String achal=(String)adapterView.getItemAtPosition(i);
         SharedPreferences.Editor editor = sharedPreferences.edit();
         editor.putString(ID_EXTRA, achal);
         editor.apply();
         Intent intent=new Intent(getActivity(), Course.class);
         intent.putExtra(ID_EXTRA, String.valueOf(l));
         startActivity(intent);
     }
 });

第二个:课程适配器

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
String  data = sharedPreferences.getString(ListNavAdapter.ID_EXTRA, "") ;
SQLiteDatabase sqLiteDatabase = SqliteDatabase.getInstance(this.getContext()).getWritableDatabase();
Cursor cursor = sqLiteDatabase.rawQuery("SELECT TEXT_NO FROM BOOK WHERE CHAPTER='" + data + "' ORDER BY _id", new String[]{});

if (cursor.getCount() == 0) {
   //
} else {
    while (cursor.moveToNext()) {
        listItem.add(cursor.getString(0));
    }
    arrayAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, listItem);
    listView.setAdapter(arrayAdapter);
}
listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
            String achal1=(String)adapterView.getItemAtPosition(i);
            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putString(ID_EXTRAA, achal1);
            editor.apply();
            Intent intent=new Intent(getActivity(), SwipeNav.class);
            intent.putExtra(ID_EXTRAA, String.valueOf(l));
            startActivity(intent);
        }
    });

第三个:SwipeNavAdapter

@Override
public Fragment getItem(int i) {
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    String  data1 = sharedPreferences.getString(ListNavAdapter.ID_EXTRA, "") ;
    System.out.println(data1);
    ArrayList<String> listItem1 = new ArrayList<String>();
    Cursor cursor1 = sqLiteDatabase.rawQuery("SELECT TEXT FROM BOOK WHERE CHAPTER='" + data1 + "'", new String[]{});
    if (cursor1.getCount() == 0) {
        ///
    } else {
        while (cursor1.moveToNext()) {
            listItem1.add(cursor1.getString(0));
        }
    }
    Object[] mStringArray1 = listItem1.toArray();
    Fragment fragment = new AFragment();
    Bundle args = new Bundle();
    assert mStringArray1 != null;
    args.putString(AFragment.ARG_OBJECT1, (String)mStringArray1[i]);
    fragment.setArguments(args);
    return fragment;
}


@Override
public int getCount() {
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
    String  data1 = sharedPreferences.getString(ListNavAdapter.ID_EXTRA, "") ;
    SQLiteDatabase sqLiteDatabase = SqliteDatabase.getInstance(context).getWritableDatabase();
    ArrayList<String> listItem = new ArrayList<>();
    Cursor cursor = sqLiteDatabase.rawQuery("SELECT TEXT FROM BOOK WHERE CHAPTER='" + data1 + "'", new String[]{});
    while (cursor.moveToNext()) {
        listItem.add(cursor.getString(cursor.getColumnIndex("TEXT")));
    }
    return listItem.size();
}

【问题讨论】:

  • @Naitik Soni,在 Course Adapter ID_EXTRA 中显示来自 ListNavAdapter 的正确数据,在 SwipeNavAdapter 中,ID_EXTRAA 显示来自 CourseAdapter 的正确数据。但是当我尝试在 SwipeNavAdapter 中获取 ID_EXTRA 时,它显示 ID_EXTRAA 的数据意味着来自 CourseAdapter 的数据不是来自 ListNavAdapter

标签: java android listview sharedpreferences


【解决方案1】:

我的问题是:在 SwipeNavAdapter 中

字符串数据1 = sharedPreferences.getString(ListNavAdapter.ID_EXTRA, "") 不显示来自 ListNavAdapter 的列表,但它显示来自 ListNavAdapter 的列表 课程适配器。我想从 ListNavAdapter 中获取单击的列表项 在 SwipeNavAdapter 中。

我假设您使用CourseAdapterListNavAdapter 中使用的相同键覆盖SharedPreferences 中的值。确保 ListNavAdapter 中的键 ID_EXTRACourseAdapter 中的 ID_EXTRAA 不同。

如果您在 sharedPreference 的同一键下添加值,则该值将被覆盖。

【讨论】:

  • 两个键不同
  • 你能提供所有三个文件的代码吗?如果您仍然面临问题。
猜你喜欢
  • 1970-01-01
  • 2021-04-15
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多