gpt4 book ai didi

java - Android:ListView 仅显示共享首选项保存的最后一项

转载 作者:行者123 更新时间:2023-12-01 17:59:35 25 4
gpt4 key购买 nike

为了清楚起见,ma.getData() 从我想要保存在共享首选项中的另一个 Activity 返回一个字符串。因此,每次我将字符串(从其他 Activity )发送到以下 Activity 时,我都会使用 saveData() 保存它(单击按钮时调用此函数)..所以我有很多字符串要在 ListView 中显示使用另外两个函数(loadData() 和 updateViews())。这些函数在 Activity 启动时调用,以便在 ListView 中加载保存的字符串。

问题是只有我从其他 Activity 获得的最后一个字符串才会显示在 listView 中。

我做错了什么?

public class activity_profile extends AppCompatActivity {

MainActivity ma = new MainActivity();
private static ArrayList<String> addArray;
ListView show;


private Button btn;
private ArrayAdapter<String> adapter;
public static final String SHARED_PREFS = "sharedPrefs";
public static final String TEXT = "text";


private String text;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_profile);
mEditText = (TextView) findViewById(R.id.hist) ;
show = (ListView) findViewById(R.id.listview1);
namefield = (EditText) findViewById(R.id.username);
namelabel = (TextView) findViewById(R.id.namelabel);
btn = (Button)findViewById(R.id.Update_btn);
loadData();
updateViews();
}
public void saveData() {
SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();

editor.putString(TEXT, ma.getData());


editor.apply();

Toast.makeText(this, "Data saved", Toast.LENGTH_SHORT).show();
}
public void loadData() {
SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
text = sharedPreferences.getString(TEXT, "");

}

public void updateViews() {

adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, Collections.singletonList(text));
show.setAdapter(adapter);
//mEditText.setText(sb.toString());
adapter.notifyDataSetChanged();

}

这是我的 ListView xml

 <RelativeLayout
android:layout_width="398dp"
android:layout_height="204dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/RecipeHistoryLabel">


<ListView
android:id="@+id/listview1"
android:layout_width="386dp"
android:layout_height="wrap_content" />
</RelativeLayout>

最佳答案

您正在覆盖 SharedPrefs 内单个键上的数据。您的选择是:

  1. 使用某种格式保存和读取共享首选项中的数据,例如json
  2. 使用数据库,例如房间

(1) 选项的示例。

//saving new data on previus key
//Use - to sepete data e.g. (FirstData-SecondData-ThiredData)
String yourNewData = "data";
String oldDataFromPrefs = prefs.getString("KEY");
String dataToBeSaved = oldDataFromPrefs + "-" + yourNewData;

//reading data as String[] to show it on the ListView
//You need to pass tokens to your adapter
String readDataFromPref = prefs.getString("KEY");
String[] tokens = readDataFromPref.split("-");

关于java - Android:ListView 仅显示共享首选项保存的最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60660122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com