我想将值添加到数组/列表中,然后将它们存储在共享首选项中,然后显示在另一个活动上。
当我尝试我的代码时,它似乎只保存第一个值,如果我添加更多它只会覆盖该值。
每次点击按钮我都不想创建List,所以我把它放在最开头。
如果没有现有值,则应将消息添加到列表中并作为Status_0存储在共享首选项中,如果存在现有值,则应将其添加为Status_1 - 但事实并非如此。我认为这是因为它没有在List中正确保存,但我不知道该怎么做。
这是我的代码:
public class EnterReadingsActivity extends AppCompatActivity implements View.OnClickListener {
private EditText erTemperatureEditText;
private Button erSubmitBtn;
public List<String> values = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Utils.onActivityCreateSetTheme(this);
setContentView(R.layout.activity_enterreadings);
init();
}
private void init() {
erTemperatureEditText = (EditText) findViewById(R.id.erTemperatureEditText);
erSubmitBtn = (Button) findViewById(R.id.erSubmitBtn);
erSubmitBtn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (view.getId()==R.id.erSubmitBtn) {
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
String message = erTemperatureEditText.getText().toString();
editor.putInt("Status_size", values.size());
int status_size = values.size();
for (int i = status_size; i < status_size + 1; i++) {
editor.putString("Status_" + i, message);
values.add(message);
editor.commit();
}
}
}
}
编辑:
int status_size = values.size();
for(int i = 0; i < status_size + 1; i++)
{
String value = values.get(i);
if (value != null) {
values.add(value);
status_size++;
String textView_i = "textView" + i;
TextView textView_i = new TextView(this);
textView_i.setLayoutParams(new ActionBar.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT,
ActionBar.LayoutParams.WRAP_CONTENT));
textView_i.setText(value);
historyBackgroundInside.addView(textView_i);
}
}
答案 0 :(得分:0)
使用sharedPreferences将数据从一个活动传递到另一个活动是不正确的。 数据通常输入到一个对象(Bundle)中,该对象将在意图中传递,然后在下一个活动中被接收。
另一种方法是使用像Bundle
这样的附加功能public class EnterReadingsActivity extends AppCompatActivity implements View.OnClickListener {
private EditText erTemperatureEditText;
private Button erSubmitBtn;
public List<String> values = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Utils.onActivityCreateSetTheme(this);
setContentView(R.layout.activity_enterreadings);
init();
}
private void init() {
erTemperatureEditText = (EditText) findViewById(R.id.erTemperatureEditText);
erSubmitBtn = (Button) findViewById(R.id.erSubmitBtn);
erSubmitBtn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (view.getId()==R.id.erSubmitBtn) {
String message = erTemperatureEditText.getText().toString();
values.add(message);
}
//Here you should enter the condition that allows you to
//call the method to go to the next activity
//ex: click of a button, I have the list reaches a size
//Add a example code
if (values.size() == 10) {
passDataAndGoInAnotherActivity();
}
}
public void passDataAndGoInAnotherActivity () {
Intent i = new Intent (this, NameOfYouNextActivity.class);
i.putExtra("status_list", values);
// Or use Bundle
// Bundle bundle = new Bundle();
// bundle.putSerializable("status_list", values);
// i.putExtra("bundle", values)
startActivity(i)
}
}
使用此代码
接收其他活动值 public class NameOfYourNextActivity extends AppCompatActivity {
public List<String> values;
public ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Utils.onActivityCreateSetTheme(this);
setContentView(R.layout.activity_nameoflayout);
listview = (ListView) findViewById(R.id.listView);
Intent intent = getIntent();
//If you first method
if (intent != null && intent.hasExtra("status_list")) {
List<String> values = (List<String>)intent.getSerializableExtra("status_list")
}
//If you second method (Bundle)
// if (intent != null && intent.hasExtra("Bundle")) {
// Bundle bundle = intent. getBundleExtra("Bundle")
// if (bundle != null && bundle.containsKey("status_list")) {
// List<String> values = (List<String>)intent.getSerializableExtra(String name)
// }
if (values != null) {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1, values);
listview.setAdapter(adapter);
}
}
}
我更新了代码,为您提供了一个接近您需要的解决方案..
请记住创建下一个活动并将其插入清单。
根据您的活动更改班级名称,并输入正确的布局名称。
请记住在您的布局中包含一个列表视图(在我的代码中更改ID),以便您打印您的值。
在此示例中,它使用Android提供的布局的简单适配器,但您可以创建自定义内容。
在这里,您会找到一个优秀的guide