【问题标题】:keeps listview data between activities在活动之间保留列表视图数据
【发布时间】:2014-03-10 08:56:39
【问题描述】:

在我的 android 应用程序中,我有 2 个活动(act1,act2)。在 act1 中,我有一个 gridview 和一些数据,当单击一个项目时,它将启动 act2.in act2 我有一个多列列表视图 和一些数据,当我按下按钮时,数据可以添加到列表中。问题是当我回到act1并从gridview中选择另一个项目时act2再次启动并且我的listview变为空(因为listview适配器在act2 oncreate方法中).但是我还需要列表中的先前数据。如果有任何想法可以在活动之间保存或保留列表视图数据。或者可以使用任何常用方法或类将项目插入列表视图。

act1(MenuActivity)

gridview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View v,
                int position, long id) {



            // to show a message box with particular name
            //Toast.makeText(getApplicationContext(),((TextView) v.findViewById(R.id.VegName)).getText(), Toast.LENGTH_SHORT).show();

            TextView Name=(TextView) v.findViewById(R.id.VegName);
            TextView Price=(TextView) v.findViewById(R.id.VegPrice);


             Intent i = new Intent(MenuActivity.this, AddOrderActivity.class);
             i.putExtra("Name", Name.getText().toString());
             i.putExtra("Price", Price.getText().toString());

             startActivity(i);


        }
    });

act2(AddOrderActivity)

public class AddOrderActivity extends Activity implements View.OnClickListener 
 {
private ListView list;
private ArrayList<HashMap<String, String>> mylist;
private HashMap<String, String> map;
SimpleAdapter mSchedule;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activityaddorder);   
Button btnAddItem = (Button) findViewById(R.id.btnAddItem);
btnAddItem.setOnClickListener(this);
list = (ListView) findViewById(R.id.listOrders);
mylist = new ArrayList<HashMap<String, String>>();
// used to show the heading of listview
map = new HashMap<String, String>();
map.put("txtItem", "Item");
map.put("txtQuantity", "Quantity");
map.put("txtTotal", "Total");
mylist.add(map);
mSchedule = new SimpleAdapter(AddOrderActivity.this, mylist, R.layout.listview_row,
new String[] { "txtItem", "txtQuantity", "txtTotal" }, new int[] {
R.id.txtItem, R.id.txtQuantity, R.id.txtTotal });
list.setAdapter(mSchedule); 
}

@Override
//i want to add new row on this button click
public void onClick(View v) {
 map.put("txtItem", "1");
    map.put("txtQuantity", "2");
    map.put("txtTotal", "2");
    mylist.add(map);              
    mSchedule.notifyDataSetChanged();
}
}   

【问题讨论】:

  • 您是否使用 arraylist 作为您的两个活动的数据?
  • @Rethinavel Pillai:yes ArrayList> mylist
  • 在此处显示您的代码您在列表视图为空的地方尝试了什么。
  • @PiyushGupta::好的,我将发布我的每个活动和代码。

标签: android android-layout listview android-listview android-activity


【解决方案1】:

我建议使用数据库并将您的列表视图链接到该数据库。这样您就不会在整个应用程序中丢失任何数据。

【讨论】:

  • ::如果有任何其他方法可以通过使用任何单独的类来填充和更新列表来将数据保存在列表视图中。
  • 是的,您始终可以创建一个单独的类并将其用作全局变量来访问或修改任何内容。但问题是您必须在应用程序开始时初始化这些变量,然后再使用它们。在您的应用程序关闭之前,您不会丢失任何信息。
  • @Vaibhav Ajay Gupta:请给出该类的结构以从 listview 插入和检索数据
  • 这个结构就像一个 pojo java 类,它的变量具有 getter 和 setter 函数。您需要做的是使用它的变量作为应用程序的全局变量。您使用arraylist 创建一个列表视图,因此您的类的变量之一应该是arraylist,可以通过调用它各自的setter 函数来修改它,并且它的值可以在任何使用它的getter 函数的地方使用。
  • 先生,我尝试了这种技术,但我的课程实施中有一些错误,所以我的应用程序将异常关闭。如果有任何方法可以给出该课程的整体结构
【解决方案2】:

在Appliation类中创建Bundle对象(每个android应用都有这个类)

  public class MyXYZApplication extends Application {

     public static Bundle MyAppDataBundle = new Bundle();  // Use this abject across the application

     @Override
     public void onCreate() {
       super.onCreate();
       app = this;
    }
}

使用 putXXX() 和 getXXX() 方法在应用程序中遍历您的 lisview 数据。

您可以在任何 Activity 或类中使用它:

someVariableORObject = MyXYZApplication.MyAppDataBundle.getXXX()

MyXYZApplication.MyAppDataBundle.putXXX("key", value)

【讨论】:

  • app=this 是什么意思
  • @Lavekush:我必须在 MyXYZApplication 类中设置适配器,但它会产生很多错误,并且还使用列表视图作为所有活动的全局
  • 您需要在您的活动中设置您的适配器。然后从任何地方在 Bundle 中设置您的列表数组数据,之后您只需调用 getXXX() 即可在适配器类中获取列表数据,只要您想用新数据通知列表,请始终记住更新捆绑对象数据(列表数据)。
  • 每个安卓应用程序都有这个类,当你的应用程序启动时,安卓系统第一次调用它。您可以在此处声明和分配所有应用程序级别的数据。
  • app == this // Application context object.
猜你喜欢
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多