如何从子活动中获取父活动的价值并将其保留在android中?

时间:2014-02-04 11:16:07

标签: android listview

我从父活动中调用子活动 我的孩子活动是列表视图& parent包含列表视图中的数据,例如选定列表项父级按钮文本中的名称和ID

A-> B-> C和c是使用Intent关闭后将数据发送回Parent B的列表视图 并使用

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

一次只制作一个活动实例 但我的问题是 我正在使用按钮单击来调用列表视图活动,并且在选择时我将值返回到父级,在单击按钮的情况下工作正常 但是如果我使用多个按钮来调用具有不同数据的列表视图,每次它不会将先前选择的数据保留到父活动时它就会被消灭

父母&列表视图子

  • btn1.text< - SelectedtestData1 - 调用具有不同数据的相同列表视图
  • btn2.text< - SelectedtestData2 - 调用不同数据的相同列表视图
  • btn3.text< - SelectedtestData3 - 调用具有不同数据的相同列表视图

如何在每个按钮上保留不同的值

ParentActivity.java

btnCust = (Button) findViewById(R.id.btnCust);      
    btnCust.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            String flag ="CU";
            //Intent intent = new Intent(getBaseContext(),MyListActivity.class);
            //intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            //intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            //intent
            Intent i = new Intent(getBaseContext(),MyListActivity.class);
            i.putExtra("flag", flag);
            startActivityForResult(i, 1);
         }
    });

    btnPospect = (Button) findViewById(R.id.btnPospect);        
    btnPospect.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            String flag ="P";
            //Intent intent = new Intent(getBaseContext(),MyListActivity.class);
            //intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            //intent.putExtra("flag", flag);
            /*Intent i = new Intent(getBaseContext(), MyListActivity.class);
            i.putExtra("flag", flag);
            startActivityForResult(i, 1);
            startActivity(i);*/
            Intent i = new Intent(getBaseContext(),MyListActivity.class);
            i.putExtra("flag", flag);
            startActivityForResult(i, 2);

        }
    }); 
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    name = data.getStringExtra("nm");
    if(requestCode==1 && resultCode==RESULT_OK){
        btnCust.setText(name);
    }
     if(requestCode==2 && resultCode==RESULT_OK) {          
         btnPospect.setText(name);
    }
 }
子listview.java中的

if (flag.equals("CU")) {
        custList = db.getAllCustomers();
        cl.setCustLst(custList);
    } else if (flag.equals("P")) {
        prosList = db.getAllProspects();
        cl.setProsLst(prosList);
    }
    final CustomListenerAdapter customAdapter = new CustomListenerAdapter(this, cl);
    list.setAdapter(customAdapter);

    if (flag.equals("CU")) {
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> myAdapter, View myView,int myItemInt, long mylng) {

                Customer cust = (Customer) customAdapter.getItem(myItemInt);
                id = cust.getId();
                nm = cust.getNm();

                close();
            }
        });

    }else if (flag.equals("P")) {
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> myAdapter, View myView,
                    int myItemInt, long mylng) {

                Prospect pros = (Prospect) customAdapter.getItem(myItemInt);
                id = pros.getId();
                nm = pros.getNm();

                close();
            }
        });
    }

public void close() {
 Intent intent=new Intent();
     intent.putExtra("flag",flag);
     intent.putExtra("id", id);
     intent.putExtra("nm", nm);
      setResult(RESULT_OK,intent);
        finish();

}

2 个答案:

答案 0 :(得分:4)

在父活动中

 btn1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            startActivityForResult(new Intent(ParentActivity.this,ChildActivity.class),1);

        }
    });

   btn2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            startActivityForResult(new Intent(ParentActivity.this,ChildActivity.class),2);

        }
    });

父活动中的onActivityResultMethod()

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==1 && resultCode==RESULT_OK)
  {
    btn1.setText(data.getStringExtra("text"));
    }

     if(requestCode==2 && resultCode==RESULT_OK)
   {
    btn2.setText(data.getStringExtra("text"));
    }


 }

在儿童活动中

         list.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View v,
                        int position, long id) {
                Intent intent=new Intent();
 intent.putExtra("text",your_text_to_send_back);
  setResult(RESULT_OK,i);
    finish();
                }
            });

您在移动设备中的设置有问题。 取消选中开发者选项设置中的不要保留活动。它会正常工作。

答案 1 :(得分:2)

实际上,您可以将数据保留在这些活动类之外

如果您的数据不是很重,您可以使用单例模式。然后可以从所有类访问数据。