OnListItemClick将其存储到数组并使用intent将该数组传递给下一个活动,并将所有选定项目显示到Listview中

时间:2016-08-02 05:50:35

标签: android arrays listview shopping-cart

我很抱歉打扰你......但是我已经在SO上搜索了我的问题但未能修复它......

PLAN

我有一个listview填充了凌空...我希望当用户点击listView的任何项目时,它会被选中(用户可以选择多个列表项目)然后点击按钮单击所有选中的项目显示在我的CartActivity的listView中

(实际上,我正在开展购物车类型活动)

问题

我使用的是ArrayList(myCartList),在onListItemClickListener方法中,我将点击的项目添加到ArrayList(myCartList),如:myCartList.add(getItem(position));

在按钮上单击此按钮后,此数组将传递给CartActivity并在ListView中显示...

代码低于

import android.app.ProgressDialog;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class grabedDb extends AppCompatActivity {
EditText grabResults;
Button cart;
String url = "http://MY_LINK_HERE";
ArrayList<HashMap<String, String>> Item_List;
ProgressDialog PD;
SimpleAdapter adapter;
ArrayList stock_list;


// JSON Node names
public static final String ITEM_ID = "name";
public static final String ITEM_NAME = "rate";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_grabed_db);
    grabResults = (EditText) findViewById(R.id.grabed_et_search);
    cart = (Button) findViewById(R.id.grabed_btn_showCart);
     grabResults.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            //perform Search
                grabedDb.this.adapter.getFilter().filter(s);
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

    Item_List = new ArrayList<HashMap<String, String>>();

    PD = new ProgressDialog(this);
    PD.setMessage("Please Wait...");
    PD.setCancelable(false);

    ReadDataFromDB();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.activity_main_actions, menu);
    return super.onCreateOptionsMenu(menu);
}
private void ReadDataFromDB() {
    PD.show();
    JsonObjectRequest jreq = new JsonObjectRequest(Request.Method.GET, url,
            new Response.Listener<JSONObject>() {

                @Override
                public void onResponse(JSONObject response) {
                    try {
                        int success = response.getInt("success");

                        if (success == 1) {
                            JSONArray ja = response.getJSONArray("mydrugs");

                            for (int i = 0; i < ja.length(); i++) {

                                JSONObject jobj = ja.getJSONObject(i);
                                HashMap<String, String> item = new HashMap<String, String>();
                                item.put(ITEM_ID, jobj.getString(ITEM_ID));
                                item.put(ITEM_NAME,
                                        jobj.getString(ITEM_NAME));

                                Item_List.add(item);

                            } // for loop ends

                            String[] from = { ITEM_ID, ITEM_NAME };
                            int[] to = { R.id.item_name, R.id.item_id };

                            adapter = new SimpleAdapter(
                                    getApplicationContext(), Item_List,
                                    R.layout.list_items, from, to);
                            ListView myList = (ListView) findViewById(R.id.list_list_listView);
                            myList.setAdapter(adapter);
                            PD.dismiss();
                            myList.setOnItemClickListener(new AdapterView.OnItemClickListener(){
                                @Override
                                public void onItemClick(AdapterView<?> parent, View view, int position,
                                                        long id) {
                                    stock_list.add(Item_List.get(position));
                                    Toast.makeText(getApplicationContext() , "Added To Cart " + Item_List.get(position), Toast.LENGTH_LONG ).show();
                                    cart.setVisibility(View.VISIBLE);
                                    cart.setOnClickListener(new View.OnClickListener() {
                                        @Override
                                        public void onClick(View v) {
                                            Intent modify_intent = new Intent(grabedDb.this,
                                                    updatedata.class);
                                            modify_intent.putStringArrayListExtra("stock_list", stock_list);

                                            startActivity(modify_intent);
                                        }
                                    });



                                }
                            });
                        } // if ends
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
            }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            PD.dismiss();
        }
    });

    // Adding request to request queue
    MyApplication.getInstance().addToReqQueue(jreq);

}
}

2 个答案:

答案 0 :(得分:0)

让你的物品Parcelable。然后通过setExtra()将整个数组作为Parcelable传递给intent,并使用getExtra()检索它。

答案 1 :(得分:0)

你好替换你的代码

myList.setOnItemClickListener(new AdapterView.OnItemClickListener(){
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
    long id) {
        stock_list.add(Item_List.get(position));
        Toast.makeText(getApplicationContext() , "Added To Cart " + Item_List.get(position), Toast.LENGTH_LONG ).show();
        cart.setVisibility(View.VISIBLE);
        cart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent modify_intent = new Intent(grabedDb.this,
                        updatedata.class);
                modify_intent.putStringArrayListExtra("stock_list", stock_list);

                startActivity(modify_intent);
            }
        });
    }
});

有了这个,

myList.setOnItemClickListener(new AdapterView.OnItemClickListener(){
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
    long id) {
        stock_list.add(Item_List.get(position));
        Toast.makeText(getApplicationContext() , "Added To Cart " + Item_List.get(position), Toast.LENGTH_LONG ).show();
        cart.setVisibility(View.VISIBLE);
    }
});

cart.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent modify_intent = new Intent(grabedDb.this,
                updatedata.class);
        modify_intent.putStringArrayListExtra("stock_list", stock_list);

        startActivity(modify_intent);
    }
});

希望它能起作用!! !!