我正在创建一个具有ListView
和Button
的应用,以便向ListView
添加新的新项目。
我想要做的是,当用户点击Button
AlertDialog
时,会弹出包含TextView
和两个Buttons
的{{1}}。用户将在TextView
中输入项目的名称,然后点击确定 Button
将该项目添加到ListView
。
我可以使用此代码完成上述所有操作 -
package com.Swap.StudyBuddy;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.DialogInterface;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
public class Add_Topics extends Activity {
AddTopics_MenuAdapter adapter;
ListView topics_list;
ArrayList<String> the_subjects = new ArrayList<String>();
String new_subject;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add__topics);
topics_list = (ListView) findViewById(R.id.topics_list);
the_subjects.add("History");
the_subjects.add("Geography");
overridePendingTransition(R.anim.reverse_in_left, R.anim.reverse_out_left);
Animation enter = AnimationUtils.loadAnimation(getBaseContext(), R.anim.upcoming_menu);
Animation enter_slow = AnimationUtils.loadAnimation(getBaseContext(), R.anim.enter_l2r_slide);
TextView des = (TextView)findViewById(R.id.des_at);
TextView title = (TextView)findViewById(R.id.title_at);
Button add_topic = (Button)findViewById(R.id.add_topic_button);
Typeface roboto_lt = Typeface.createFromAsset(getAssets(), "Roboto-Light.ttf");
des.setTypeface(roboto_lt);
title.setTypeface(roboto_lt);
add_topic.setTypeface(roboto_lt);
title.startAnimation(enter);
des.startAnimation(enter_slow);
adapter = new AddTopics_MenuAdapter(this, the_subjects);
topics_list.setAdapter(adapter);
}
public void onClickAddTopic(View v) {
showDialog(0);
}
protected Dialog onCreateDialog(int id) {
switch(id) {
case 0:
LayoutInflater li = LayoutInflater.from(this);
View edt_txt_add_tpc = li.inflate(R.layout.add_topics_res, null);
edt_txt_add_tpc.requestFocus();
edt_txt_add_tpc.setSelected(true);
final EditText tpc_nm = (EditText) edt_txt_add_tpc.findViewById(R.id.topic_name);
Builder bld = new AlertDialog.Builder(this);
bld.setIcon(R.drawable.ic_launcher);
bld.setTitle("Add Topic/Subject");
bld.setView(edt_txt_add_tpc);
bld.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButon) {
String new_topic_name = tpc_nm.getText().toString();
new_subject = new_topic_name;
adapter = null;
the_subjects.add(new_topic_name);
adapter = new AddTopics_MenuAdapter(getBaseContext(), the_subjects);
adapter.notifyDataSetChanged();
}
});
bld.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
});
return bld.create();
}
return null;
}
@Override
public void onBackPressed() {
super.onBackPressed();
overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_add__topics, menu);
return true;
}
}
但是,只要重新加载ListView
,修改后的Activity
就会丢失所有动态添加的项目。有人请告诉我该怎么做,即使重新加载ListView
后新添加的项目仍保留在Activity
。
先谢谢!!
答案 0 :(得分:1)
ListViews不会自动保留数据。在onCreate
方法中,创建一个ArrayList,向其添加两个字符串,并使用此ArrayList创建一个适配器 - 这样每次再次创建Activity时,将在ListView中显示的数据。
您需要查看storing the data somewhere,例如使用SQLite数据库。然后,可以使用此CursorLoader
填充ListView - 请参阅ListView guide以开始使用。
答案 1 :(得分:1)
这取决于您希望将它们存储多长时间:
要在应用程序的生命周期中保存它们,即当应用程序重新启动时,将使用Activity.onPause和Activity.onResume将列表项保存到参数包中。
如果您希望它们在应用重新启动后保持不变,您可以使用首选项或数据库来存储值。
答案 2 :(得分:0)
尽量不要在类的顶部实例化the_subjects。在create方法中实例化它。否则它即使在恢复时也会被实例化我猜