【问题标题】:Android: Going back to previous activity and pass it an arrayAndroid:返回上一个活动并将其传递给一个数组
【发布时间】:2016-04-17 19:27:58
【问题描述】:

我有活动 A 和活动 B 活动 A 使用 Button 打开活动 B,我向它传递了一个数组 在活动 B 中,我修改了数组,当我单击按钮时,我想再次返回或打开活动 A 并将修改后的数组传递给它

有没有办法做到这一点?

对不起我的英语

在这种情况下,我有 BeginService 类,我将数组传递给 new ConceptsActivity(bill.getService()); 中的另一个活动,ConceptsActivity 修改数组并将其再次传递给 BeginService,依此类推。我这样做是因为我需要在我的账单中添加服务。 这是 BeginService 类的代码

public class BeginService extends AppCompatActivity {
private Service service[] = new Service[5];

Bill bill = new Bill();

public BeginService(){

}

public BeginService(Service service[]){
    this.service = service;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTitle(R.string.TitleSer);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.add_concepts);
}

public void openConcepts(View view){
    new ConceptsActivity(bill.getService());
    Intent intent = new Intent(this,ConceptsActivity.class);
    startActivity(intent);
}

ConceptsActivity 类

public class ConceptsActivity extends AppCompatActivity{
private int i=0;
private AutoCompleteTextView actv;
private TextView tvConcept;
private TextView tvConcept2;
private TextView warning;
private TextView tvPrice;
private TextView tvbs;
private EditText price;
private Button addConcept;
private String concept;
private double priceDo;
private List<AddConceptsListView> myConcept = new ArrayList<AddConceptsListView>();

private Service[] service; //= new Service[5];

public ConceptsActivity(){

}

public ConceptsActivity(Service service[]){
    this.service = service;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTitle(R.string.TitleSer);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.concepts_layout);


    for(int j=0; j<service.length; j++){
        service[j] = new Service();
        if(service[j].getName() != null){
            i++;
        }
    }

    actv = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextViewConcept);
    tvConcept = (TextView) findViewById(R.id.textViewConcept);
    tvConcept2 = (TextView) findViewById(R.id.textViewConcept2);
    warning = (TextView) findViewById(R.id.textViewWarning);
    tvPrice = (TextView) findViewById(R.id.textViewPrice);
    price = (EditText) findViewById(R.id.editTextPrice);
    addConcept = (Button) findViewById(R.id.buttonAddConcept);

    //Autocomplete Textview
    String[] services = getResources().getStringArray(R.array.services_array);
    ArrayAdapter<String> adapter =
            new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, services);
    actv.setAdapter(adapter);

    actv.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            boolean handled = false;
            if (actionId == EditorInfo.IME_ACTION_DONE) {
                //make items visible
                tvConcept.setVisibility(View.VISIBLE);
                tvConcept2.setVisibility(View.VISIBLE);
                tvPrice.setVisibility(View.VISIBLE);
                price.setVisibility(View.VISIBLE);
                addConcept.setVisibility(View.VISIBLE);

                concept = actv.getText()+"";
                tvConcept2.setText(concept);
                //To hide the keyboard
                InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

                handled = true;
            }
            return handled;
        }
    });
}

public void onClickAddConcept(View view){
    if(price.getText().toString().equals("")){
        warning.setVisibility(View.VISIBLE);
    }
    else {
        warning.setVisibility(View.INVISIBLE);

        priceDo = Double.parseDouble(price.getText().toString());
        Toast.makeText(getApplicationContext(),"Precio: " + priceDo+ "" + "\n"
                + "Concepto: " + concept,Toast.LENGTH_SHORT).show();

        service[i].setName(concept);
        service[i].setPrice(priceDo);
        i++;

        for(int j=0; j<service.length; j++){
            if(service[j].getName() != null || service[j].getPrice() != null){
                Toast.makeText(getApplicationContext(), "Array" + j + "nameConcept: " + service[j].getName() +
                        "\n" + "Array price: " + service[j].getPrice(), Toast.LENGTH_SHORT).show();
            }
        }
    }


    ArrayAdapter<Service> my = new ArrayAdapter<Service>(this, android.R.layout.simple_list_item_1, service);
    setContentView(R.layout.add_concepts);
    tvbs = (TextView) findViewById(R.id.textViewBeginService);
    tvbs.setVisibility(View.INVISIBLE);
    ListView mainListView = (ListView) findViewById(R.id.list2);
    mainListView.setAdapter(my);

}

【问题讨论】:

  • 查看 startActivityForResult/onActicityResult 和捆绑包
  • 你考虑过使用Bundle的
  • stackoverflow.com/a/34737301/3498931 .. 你可以使用 Intent 来做到这一点 .. 我在那里举了一个简短的例子.. 看看..
  • 谢谢 我想知道是否有办法传递自定义类型的数组:例如 Service [] service In a bundle?

标签: android android-activity


【解决方案1】:

在您的目标活动中使用setResult

Intent resultIntent = new Intent();
resultIntent .putExtra("arrayName", your_array_name);
setResult(Activity.RESULT_OK, resultIntent);
finish();

在您的第一个活动中,添加

  @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      switch(requestCode) {
        case (MY_CHILD_ACTIVITY) : {
          if (resultCode == Activity.RESULT_OK) {
           ArrayList<String> myList = (ArrayList<String>) getIntent().getSerializableExtra("arrayName");
              // myList gives you the array list
          }
          break;
        } 
      }
    }

【讨论】:

  • 问题是我不能使用ArrayList,我需要一个对象类型的数组
猜你喜欢
  • 2013-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 2011-05-01
相关资源
最近更新 更多