【问题标题】:creating a child activity to select data from list创建一个子活动以从列表中选择数据
【发布时间】:2016-08-19 10:05:28
【问题描述】:

我想创建一个将在父活动对象单击时打开的子活动。为了更好地理解,请参阅 redbus 应用程序的屏幕截图:

在第一个屏幕中,用户点击进入城市(以红色突出显示)然后进入第二个屏幕,用户通过搜索城市名称来选择城市。然后在点击城市后,用户将返回屏幕 1 并选择城市,并且它不会影响屏幕 1 之前的数据。

我也试过了,可以看代码:

UserDetails.java

@Override
public void onClick(View v) {
    switch (v.getId()) {

        case R.id.btnCancel:
            CancelAll();
            break;
        case R.id.defenceArea:
            DefenceAreaSelection();
            break;

        default:
    }
}

private void DefenceAreaSelection() {

    isSelection = true;
    ArrayList<Integer> IdList = new ArrayList<>();
    for (int i=0;i<mDefenceAreaModel.size();i++){
        IdList.add(mDefenceAreaModel.get(i).getDefenseAreaID());
    }
    Intent intent = new Intent(UserDetails.this, ListSelection.class);
    intent.putExtra("names",mDefenceAreaNames);
    intent.putExtra("ID",IdList);

    //TODO send 2 array for id and names to ease the process
    startActivityForResult(intent,requestCodeDefenceArea);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == requestCodeDefenceArea){
        Log.e("defe","got it");
    }
}

ListSelection.java

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list_select_screen);
    Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
    setSupportActionBar(myToolbar);

    try {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    } catch (NullPointerException e) {
        e.printStackTrace();
        //Log.e("exception",e.getMessage());
    }
     ArrayList<String> listNames  = (ArrayList<String>) getIntent().getSerializableExtra("names");
     ArrayList<Integer> listId  = (ArrayList<Integer>) getIntent().getSerializableExtra("ID");
    list = (ListView)findViewById(R.id.listNames);

    ArrayAdapter adapter = new ArrayAdapter(ListSelection.this,android.R.layout.simple_dropdown_item_1line,listNames);
    list.setAdapter(adapter);

    //TODO  onitem click set the result and go back to parent activity
}

但我遇到的问题是在选择区域后它会返回上一个屏幕,但屏幕 1 中的前一个数据不再存在,这意味着除了 Activity Result 它还调用 onCreate() 方法。

【问题讨论】:

    标签: java android android-activity parent-child activity-lifecycle


    【解决方案1】:

    最好的办法是使用 EventBus 库。我有一个演示应用程序,您可以在其中使用 EventBus 从应用程序内的任何位置将项目添加到 RecyclerView。您可以将其插入到 TextView 中,而不是 RecyclerView。这是回购的链接:

    https://github.com/code-crusher/android-demos/tree/master/EventBusDemo

    也请阅读这篇文章以获得更好的理解和参考:

    https://medium.com/@code_crusher/eventbus-for-android

    希望对您有所帮助。快乐编码:)

    【讨论】:

      【解决方案2】:

      问题是你没有保存视图状态!

      如果您使用自定义视图,默认情况下不会保存其内容,尤其是在您覆盖 onSaveInstanceState() 而不调用 super 时。

      有很多方法可以解决问题,其中最好的是将内容保留在视图中,您可以在StackOverflow answer阅读更多内容

      但如果你想走简单的路,你可以简单地在你的活动中的onSaveInstanceState() 中将 nesaccary 数据保存在一个 Bundle 中,并将以前的数据设置在onRestoreInstanceState()

      【讨论】:

        猜你喜欢
        • 2021-05-13
        • 1970-01-01
        • 1970-01-01
        • 2021-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-15
        • 1970-01-01
        相关资源
        最近更新 更多