【问题标题】:Displaying input value in listview form using shared preferences使用共享首选项以列表视图形式显示输入值
【发布时间】:2018-08-19 11:16:00
【问题描述】:

我正在尝试创建历史记录。我有两个活动。一种是用户在editText中输入值并将其存储在共享首选项中,另一种是使用共享首选项以列表视图形式显示值。我不知道是什么错误,因为应用程序崩溃了。

第一个活动

 package com.example.sy.list;

 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
 import android.view.View;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.Button;
 import android.widget.EditText;


 public class History extends AppCompatActivity {
Button translate;
Button next;
EditText enterText;
private SharedPreferences hPreferences;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.history);

    enterText = findViewById(R.id.editText);
    next = findViewById(R.id.btnNext);

    translate = findViewById(R.id.buttonTranslate);
    View.OnClickListener addlistener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(enterText.getWindowToken(), 0);
            hPreferences  = getSharedPreferences("SaveHistory",Context.MODE_PRIVATE);
            SharedPreferences.Editor editor = hPreferences.edit();
            editor.putString("history",enterText.getText().toString());
            editor.apply();
            enterText.setText("");



        }

    };
    translate.setOnClickListener(addlistener);
    next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(History.this,MainActivity.class);
            startActivity(intent);
        }
    });



}

}

第二个活动

 package com.example.sy.list;

 import android.content.Context;
 import android.content.SharedPreferences;
 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
 import android.view.ActionMode;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.widget.AbsListView;
 import android.widget.ArrayAdapter;
 import android.widget.ListView;
 import java.util.ArrayList;


public class MainActivity extends AppCompatActivity {
private ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ArrayList<String> itemList = new ArrayList<String>();
    ArrayAdapter<String> adapter;
    adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, itemList);
    listView.setAdapter(adapter);

    listView = findViewById(R.id.listView);
    SharedPreferences transHistory  = getSharedPreferences("SaveHistory",Context.MODE_PRIVATE);
    String tHistory = transHistory.getString("history","Data Not Found");
    itemList.add(tHistory);
    adapter.notifyDataSetChanged();


}

}

【问题讨论】:

    标签: android listview sharedpreferences


    【解决方案1】:

    您的错误可能是由此引起的:

    listView.setAdapter(适配器);

    listView = findViewById(R.id.listView);

    首先,您设置了适配器listView.setAdapter(adapter);,但问题是listView 不为空,因为您调用了listView = findViewByIt(R.id.listview);

    所以,切换语句,你应该很高兴

    编辑

    listView = findViewById(R.id.listView);
    

    然后

    listView.setAdapter(adapter);
    

    【讨论】:

    • 谢谢。有用。但我还有另一个问题。它只是更改列表视图中单个项目的现有值,而不是填充列表视图。
    • P.S.在这里对不起新手
    • 那么,您希望将最后添加的项目添加到顶部吗?在这种情况下,您应该保存在共享首选项中,不仅是最后一个String,而是一个ArrayList&lt;String&gt;。每次添加另一个项目时,只需更新共享首选项中的数组;)
    • 是的,这就是我想要发生的事情。我应该将代码的哪一部分更改为 ArrayList
    • 您可以查看this StackOverflow post 以了解如何将ArrayList 保存在共享首选项中!
    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多