【问题标题】:Android: ListView shows only last item saved by Shared PreferencesAndroid:ListView 仅显示共享首选项保存的最后一项
【发布时间】:2020-03-12 18:42:31
【问题描述】:

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

问题是只有我从其他活动获得的最后一个字符串显示在 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();

}

这是我的列表视图的 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>

【问题讨论】:

    标签: java android list file listview


    【解决方案1】:

    您正在将数据覆盖在 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("-");
    

    【讨论】:

      猜你喜欢
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 2019-04-09
      • 2019-10-03
      • 1970-01-01
      相关资源
      最近更新 更多