如何将ListView中的数据从第一个Activity保存到第二个Activity?

时间:2017-09-14 18:53:33

标签: java android listview

我正在为一家餐馆写一个应用程序,并希望能够选择您想要订购的特定菜肴,并且已将其添加到OrderActivity,其中,以ListView的形式,您将显示单个菜肴由用户选择。
我不知道如何以最好的方式做到这一点,你需要使用界面,也许只是得到特定菜的意图?
如何在OrderActivity中保存特定请求,以便当我返回到之前的Activity时,我不会丢失ListView中保存的数据?

我设法解决了将数据从一个Activity传输到第二个Activity并在ListView上显示的问题,我不知道如何保存这些数据,比如说SharedPreferences的例子?
如果我在第二个活动中单击后退按钮,我的列表将变为空 我明白故障发生在onResume()因为我正在杀死第二个活动,当我回到第一个活动时,是这样吗?

如何解决问题?

FirstActivity:

public class DinnerDetailActivity extends AppCompatActivity {

    public static final String EXTRA_DINNER = "dinner"; 

    private final int requestCode = 1;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_obiady_domowe_detail);


        int dinner = (Integer) getIntent().getExtras().get(EXTRA_DINNER);

        String dinnerName = Dinner.dinn[dinner].getName();
        TextView textView = (TextView) findViewById(R.id.dinner_text);
        textView.setText(dinnerName);


        int dinnerImage = Dinner.dinn[dinner].getImageResourceId();
        ImageView imageView = (ImageView) findViewById(R.id.dinner_image);
        imageView.setImageDrawable(getResources().getDrawable(dinnerImage));
        imageView.setContentDescription(dinnerName);



        Toolbar myChildToolbar = (Toolbar) 
        findViewById(R.id.my_child_toolbar_obiady_detail);
        setSupportActionBar(myChildToolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }

   /* @Override
    protected void onResume() {

        SharedPreferences sharedPref = getSharedPreferences("KEY", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString("KEY", listItems.add();
        editor.apply();

        Toast.makeText(getApplicationContext(), "Save!", Toast.LENGTH_SHORT).show();
        super.onResume();
    }
*/

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.menu_main, menu);

        TextView textView = (TextView) findViewById(R.id.dinner_text);
        CharSequence dinnerName = textView.getText();
        MenuItem menuItem = menu.findItem(R.id.action_share);
        ShareActionProvider shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("text/plain");
        intent.putExtra(Intent.EXTRA_TEXT, dinnerName);
        shareActionProvider.setShareIntent(intent);

        return true;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case R.id.action_create_order:
                Intent intent = new Intent(this, TopFragment.class);
                startActivity(intent);
                return true;
            default:

        return super.onOptionsItemSelected(item);
     }
    }

//单击按钮,将dinnerName添加到SecondActivity ListView

    public void addInOrder(View view) { 

    int dinner = (Integer) getIntent().getExtras().get(EXTRA_DINNER); 

    String dinnerName = Dinner.dinn[dinner].getName();

    Intent intent1 = new Intent(this, CreateYourOrderActivity.class);
    intent1.putExtra("OK", dinnerName);
    startActivityForResult(intent1, requestCode);


    }
}

第二项活动:

public class CreateYourOrderActivity extends AppCompatActivity {

    private ListView listView;
    private ArrayAdapter<String> adapter;
    private ArrayList<String> listItems;

    private String dinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_zloz_zamowienie);

        Toolbar myChildToolbar = (Toolbar) 
            findViewById(R.id.my_child_toolbar);

        setSupportActionBar(myChildToolbar);

        ActionBar ab = getSupportActionBar();
        ab.setDisplayHomeAsUpEnabled(true);

        textView = (TextView) findViewById(R.id.text_view);

    }
/*
    @Override
    protected void onResume() {

        SharedPreferences sharedPref = getSharedPreferences("KEY", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString("KEY", obiad);
        editor.apply();

        listItems.add(obiad);
        adapter.notifyDataSetChanged();

        Toast.makeText(getApplicationContext(), "Save!", Toast.LENGTH_SHORT).show();
        super.onResume();
    }
*/
    /* @Override
    public void onBackPressed() {
        SharedPreferences sharedPref = getSharedPreferences("KEY", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putString("KEY", listItems.get(0).toString());
        editor.apply();

        Toast.makeText(getApplicationContext(), "Save!", Toast.LENGTH_SHORT).show();
    }*/

    public void saveInfo(View view) {



    }

    public void openInfo(View view) {

        SharedPreferences sharedPref = getSharedPreferences("KEY", Context.MODE_PRIVATE);
        String obiadNames = sharedPref.getString("KEY", "");

        textView.setText(obiadNames);
        //listItems.add(obiadNames);
        //adapter.notifyDataSetChanged();

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.menu_main, menu);

        return true;
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case R.id.action_create_order:
                Intent intent = new Intent(this, MainActivity.class);

                return true;
            default:

                return super.onOptionsItemSelected(item);
        }

    }

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


       Intent intent = getIntent();

        if(resultCode == RESULT_OK) {
           if(requestCode == 1){


            dinner = data.getExtras().getString("OK");

            listView = (ListView) findViewById(R.id.listView);


            listItems.add(dinner);


            adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems);
            listView.setAdapter(adapter);

            //  adapter.add(dinner);
            adapter.notifyDataSetChanged();

            finish();
        }

       }
    }

因此,您可以在附带的照片中看到我们有第一个活动,几个菜肴,我们从中进入详细的活动,我们有AddOrder按钮。 我想点击这个按钮,在你在图片中看到的3个活动中添加我特定菜肴的名称 这将作为ListView添加 此外,当我返回1活动时,我希望菜肴的名称没有消失。

1 个答案:

答案 0 :(得分:0)

SharedPreferences用于简单值。

您需要一个适当的数据库(Sqlite,Realm或其他),您可以使用该数据库在整个应用程序中持久存储和查询数据,而无需跨越Intent边界传递整个对象。

更具体地说,您需要替换Dinner.dinn数组

要在转到详细信息视图时获取特定项目,可以传递对象的数据库ID,然后再查询。

当您添加新项目并返回列表时,您将使用所有数据库条目更新适配器