0

カートに ExpandableListView があり、ExpandableListAdapter とカート アクティビティを使用してカートにアイテムをロードしています。アイテムがカートに追加されると表示できますが、アクティビティを変更してカートに戻ると、カートが空になり、追加されたアイテムが空として表示されます。カートに値を保持するにはどうすればよいですか。

onSaveInstanceState(Bundle)andの使用について読みましonRestoreInstanceState()たが、正確な使用方法について少し混乱しています。以下に私のコードを示しました。誰でもこれで私を助けることができます。どんな助けでも大歓迎です。

    public class ShoppingCartActivity extends Activity {

    ProductAdapter mCartList;
    ExpandableListView expListView;
    List<String> listDataHeader;
    List<String> listDataHeaderPrice;
    List<String> listDataHeaderQty;
    HashMap<String, List<String>> listDataChild;
    private ExpandableListView mExpandableList;
    String description;
    String price;
    String quantity;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.cart_activity);

        quantity = getIntent().getStringExtra("quantity");
        price = getIntent().getStringExtra("price");
        description = getIntent().getStringExtra("description");

        List<String> myList = new ArrayList<String>();
        myList.add(description);
        myList.add(quantity);
        myList.add(price);

        ActionBar actionBar = getActionBar();
        getActionBar().setIcon(
                new ColorDrawable(getResources().getColor(
                        android.R.color.transparent)));
        getWindow().setSoftInputMode(
                WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
        // Enabling Back navigation on Action Bar icon
        actionBar.setDisplayHomeAsUpEnabled(true);

        // get the listview
        expListView = (ExpandableListView) findViewById(R.id.lvExp);

        // preparing list data
        prepareListData();

        mCartList = new ProductAdapter(this, listDataHeader,
                listDataHeaderPrice, listDataHeaderQty, listDataChild);

        // setting list adapter
        expListView.setAdapter(mCartList);

        // Listview Group click listener
        expListView.setOnGroupClickListener(new OnGroupClickListener() {

            @Override
            public boolean onGroupClick(ExpandableListView parent, View v,
                    int groupPosition, long id) {
                Toast.makeText(getApplicationContext(),
                        "Group Clicked " + listDataHeader.get(groupPosition),
                        Toast.LENGTH_SHORT).show();
                return false;
            }
        });

        // Listview Group expanded listener
        expListView.setOnGroupExpandListener(new OnGroupExpandListener() {

            @Override
            public void onGroupExpand(int groupPosition) {
                Toast.makeText(getApplicationContext(),
                        listDataHeader.get(groupPosition) + " Expanded",
                        Toast.LENGTH_SHORT).show();
            }
        });

        // Listview Group collasped listener
        expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() {

            @Override
            public void onGroupCollapse(int groupPosition) {
                Toast.makeText(getApplicationContext(),
                        listDataHeader.get(groupPosition) + " Collapsed",
                        Toast.LENGTH_SHORT).show();

            }
        });

        // Listview on child click listener
        expListView.setOnChildClickListener(new OnChildClickListener() {

            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                    int groupPosition, int childPosition, long id) {
                // TODO Auto-generated method stub
                Toast.makeText(
                        getApplicationContext(),
                        listDataHeader.get(groupPosition)
                        + " : "
                        + listDataChild.get(
                                listDataHeader.get(groupPosition)).get(
                                        childPosition), Toast.LENGTH_SHORT)
                                        .show();
                return false;
            }
        });
    }

    /*
     * Preparing the list data
     */
    private void prepareListData() {
        listDataHeader = new ArrayList<String>();
        listDataHeaderQty = new ArrayList<String>();
        listDataHeaderPrice = new ArrayList<String>();
        listDataChild = new HashMap<String, List<String>>();

        // Adding child data
        listDataHeader.add(description);
        listDataHeaderQty.add(quantity);
        listDataHeaderPrice.add(price);

        // Adding child data
        List<String> description = new ArrayList<String>();
        description.add("The Shawshank");
        List<String> quantity = new ArrayList<String>();
        quantity.add("The Shawshank");
        List<String> price = new ArrayList<String>();
        price.add("The Shawshank");

        listDataChild.put(listDataHeader.get(0), description);
        listDataChild.put(listDataHeaderQty.get(0), quantity);
        listDataChild.put(listDataHeaderPrice.get(0), price);
        // Header, Child
        // data

        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        int width = metrics.widthPixels;

        mExpandableList = (ExpandableListView) findViewById(R.id.lvExp);
        mExpandableList.setIndicatorBounds(width - GetPixelFromDips(50), width
                - GetPixelFromDips(10));
    }

    public int GetPixelFromDips(float pixels) {
        // Get the screen's density scale
        final float scale = getResources().getDisplayMetrics().density;
        // Convert the dps to pixels, based on density scale
        return (int) (pixels * scale + 0.5f);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.activity_main_actions, menu);
        menu.getItem(1).setVisible(false);
        return super.onCreateOptionsMenu(menu);

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Take appropriate action for each action item click
        switch (item.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            finish();
            overridePendingTransition(R.anim.slide_in_left,
                    R.anim.slide_out_right);
            return true;
        case R.id.action_search:
            Intent i = new Intent(getApplicationContext(),
                    SearchResultsActivity.class);
            startActivityForResult(intent, 0); //added his

            overridePendingTransition(R.anim.slide_in_right,
                    R.anim.slide_out_left);
            return true;
        case R.id.action_cart:
            Intent intent = new Intent(getApplicationContext(),
                    ShoppingCartActivity.class);

startActivity(i);
            overridePendingTransition(R.anim.slide_in_right,
                    R.anim.slide_out_left);
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

}

私の2番目の活動で

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search_results);
        setResult(RESULT_OK);
        // get the action bar
        ActionBar actionBar = getActionBar();
        getActionBar().setIcon(
                new ColorDrawable(getResources().getColor(android.R.color.transparent)));

        // Enabling Back navigation on Action Bar icon
        actionBar.setDisplayHomeAsUpEnabled(true);

        txtQuery = (TextView) findViewById(R.id.txtQuery);

        handleIntent(getIntent());
    }
4

1 に答える 1

0

アクティビティを変更してカートに戻ると、カートが空になり、追加されたアイテムが空として表示されます

startActivityForResultの代わりに使用して次のアクティビティを開始startActivityし、データを取り戻します。

setResult(resultCode)を使い始めたActivityからも呼び出しますstartActivityForResult

于 2015-02-19T13:25:23.127 に答える