簡體   English   中英

僅顯示添加到ArrayList中的最后一項

[英]Only the last item added in ArrayList shows

我是一般編程新手,正在嘗試將項目添加到我創建的ArrayList中。 然后,我嘗試在Android TextView中顯示ArrayList以確認ArrayList的內容。 簡化的代碼如下:

 public TextView textView1;
 public ArrayList<String> namesArray = new ArrayList<>();
 public static final String DEFAULT= "N/A";

 public void contactsArray() {
    loadArrayButton = (Button) findViewById((R.id.loadArrayButton));
    loadArrayButton.setOnClickListener(new View.OnClickListener() {
        @Override

        public void onClick(View view) {
              SharedPreferences sharedPreferences = getSharedPreferences("MyData", Context.MODE_PRIVATE);
              int howMany = sharedPreferences.getAll().size();

              for (int i = 1; i < howMany; i ++) {
                  String name = sharedPreferences.getString("name" + i, DEFAULT);
                  namesArray.add(sharedPreferences.getString("name" + i, DEFAULT));
            }

我知道正確保存了共享的首選項,因為如果我分別檢索它們,它們將以我期望的方式出現。 當我顯示ArrayList的內容時,僅顯示添加到ArrayList的最后一項。 其余代碼如下:

String listRepresentation = "";
for (String name : namesArray)
if ("".equals(listRepresentation))
    listRepresentation  = name; else
    listRepresentation  = ", " + name;
textView1.setText(listRepresentation );

同樣,唯一出現的是for循環中添加的姓氏。 任何幫助將不勝感激-謝謝!

在循環中顯示結果時,將覆蓋每個索引處的字符串。

使用+ =解決此問題:

 String listRepresentation = "";
 for (String name : namesArray) {
     if ("".equals(listRepresentation)) {
          listRepresentation += name;
      } else {
          listRepresentation += ", " + name;
      }
 }
 textView1.setText(listRepresentation );

運算符+ =等於listRepresentation = listRepresentation + ...;

您錯過的是:

您剛剛設置了值listRepresentation但沒有按順序添加它。

解:

您可以使用此代碼代替最后的代碼

String listRepresentation = "";
String showData = "";
for (String name : namesArray) {
    if ("".equals(listRepresentation)) {
        listRepresentation  = name;
    } else {
        listRepresentation  = ", " + name;
    }
showData = showData + listRepresentation;
}
textView1.setText(showData);

請使用StringBuilder而不是字符串(listRepresentation)。 問題將得到解決。

您是否知道sharedPreferences.getAll()。size(); 例如,您的代碼中有2個項目放在namesArray中,只有1個項目? 嘗試

for (int i = 1; i <= howMany; i ++) {
              String name = sharedPreferences.getString("name" + i, DEFAULT);
              namesArray.add(sharedPreferences.getString("name" + i, DEFAULT));
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM