我有一个基本应用程序,用于填充数组并将其显示在列表视图中。当我关闭应用程序并重新打开它时,listview为空,你会在哪里保存数组?我看到很多关于共享首选项的帖子,但似乎是在那里存储数组的解决方法,也无法在阵列存储上找到任何android文档?有人能指出我正确的方向吗?
我的代码按要求....
public class ListView_Activity extends AppCompatActivity {
ArrayList<String>mylistarray = new ArrayList<>();
String tempdescr;
String tempname;
static final int ADD_NEW_ITEM = 1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view_);
/*add the main toolbar and make some changes to format*/
Toolbar mToolbar = findViewById(R.id.my_toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
mToolbar.setTitle(R.string.toolbartitle);
mToolbar.setSubtitle(R.string.toolbarsubtitle);
mToolbar.setTitleTextColor(getResources().getColor(R.color.colorWhite));
mToolbar.setSubtitleTextColor(getResources().getColor(R.color.colorAccent));
final ArrayAdapter<String> myadapter = new ArrayAdapter<String>(ListView_Activity.this, R.layout.simple_list_item_1, R.id.row_item_text_view, mylistarray);
/*create array adapter and set to listview*/
final ListView mylistview = findViewById(R.id.mylistview);
mylistview.setAdapter(myadapter);
mylistarray.add("Test");
myadapter.notifyDataSetChanged();
final FloatingActionButton additembutton = findViewById(R.id.floatingActionButton);
additembutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent additem = new Intent(ListView_Activity.this, Create_Item_Activity.class);
startActivityForResult(additem, 1);
}
});
}
/*load options menu to toolbar*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_toolbar, menu);
return true;
}
/*handle options menu click events*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.settings:
//intent here to load settings activity//
return true;
case R.id.Feedback:
Intent Feedbackemail = new Intent(Intent.ACTION_SEND);
Feedbackemail.setType("text/email");
Feedbackemail.putExtra(Intent.EXTRA_EMAIL, new String[]{"adam.e.garnham@gmail.com"});
Feedbackemail.putExtra(Intent.EXTRA_SUBJECT, "Feedback");
Feedbackemail.putExtra(Intent.EXTRA_TEXT,"Dear..."+"");
startActivity(Intent.createChooser(Feedbackemail,"Send Feedback"));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if (requestCode == ADD_NEW_ITEM){
if (resultCode == Activity.RESULT_OK) {
tempdescr = data.getStringExtra("tempdescr");
tempname = data.getStringExtra("tempname");
mylistarray.add(tempdescr);
mylistarray.add(tempname);
}
if (resultCode == Activity.RESULT_CANCELED) {
Toast replacewithcode = Toast.makeText(ListView_Activity.this, "replace with code", Toast.LENGTH_SHORT);
replacewithcode.show();
}
}
}
}
答案 0 :(得分:1)
您可以使用多种选项来存储阵列。
选项1。
共享偏好设置,快速且易于理解。只要你的阵列不大,这可能是最好的选择。以下是共享偏好指南的链接。
https://developer.android.com/training/data-storage/shared-preferences.html
有了这个,您可能希望使用像GSON这样的东西将数组转换为字符串,然后存储字符串。
选项2。
存储在本地mysqlite数据库中,这有点复杂,但可以为您的数组保存大量数据。这是android sqlite指南的链接。
https://developer.android.com/training/data-storage/sqlite.html
选项3.
使用数据库/服务器,这个设置时间最长,但允许应用程序获取数据。此选项需要与数据库建立Internet连接。
如果您认为可以处理它,我建议您设置一个mysqlite数据库,但如果您是初学者,我会倾向于将数组存储在共享首选项中,因为设置的代码要少得多。