2016-07-01 5 views
0

Ich kann den Toast in meiner Menüaktivität anzeigen, aber jetzt muss ich die ausgewählten Daten aus der Listenansicht abrufen und sie auf einer anderen Seite anzeigen. Ich habe viele Methoden ausprobiert und suche danach, aber ich kann es nicht verstehen.Abrufen von Daten aus der Listenansicht, wenn ich den Adapter verwende

menuactivity:

public class MenuActivity extends Activity { 


    private String server = "http://172.16.156.56"; 
    private String sql_table = "orders"; 
    private ListView list; 
    private TextView txtOrder, txtMember, txtPrice; 
    private Button btnAdd; 
    ArrayList<String> rows; 

    ListView listView1; 
    Button btnSubmit; 
    ArrayList<CustomItem> itemList, selectedList; 



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


     list=(ListView) findViewById(R.id.listView); 
     btnAdd = (Button)findViewById(R.id.button); 
     rows = new ArrayList<String>(); 


     itemList=new ArrayList<CustomItem>(); 
     itemList.add(new CustomItem("Fried Rice","description","1","Quantity")); 
     itemList.add(new CustomItem("Fried Noodle","description","2","Quantity")); 
     itemList.add(new CustomItem("Prawn noodle","description","3","Quantity")); 
     itemList.add(new CustomItem("Chicken Rice","description","4","Quantity")); 

     int[] prgmImages={R.drawable.friedrice,R.drawable.friednoodle,R.drawable.pnoodle,R.drawable.chickenrice}; 

     listView1 = (ListView) findViewById(R.id.listView); 
     final CustomLVAdapter customLVAdapter = new CustomLVAdapter(this, itemList,prgmImages); 
     listView1.setAdapter(customLVAdapter); 


     txtOrder = (TextView) findViewById(R.id.txt1); 
     txtMember = (TextView) findViewById(R.id.txt2); 
     txtPrice = (TextView) findViewById(R.id.txt3); 


     btnSubmit = (Button) findViewById(R.id.button); 


     btnSubmit.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 



       StringBuffer responseText = new StringBuffer(); 
       selectedList = new ArrayList<CustomItem>(); 
       int total = 0; 
       for (int i = 0; i < itemList.size(); i++) { 
        CustomItem object = itemList.get(i); 
        if (object.isSelected()) { 
         responseText.append(object.getItem() + "," + object.getQty() + ",");//item 
         selectedList.add(object); 
         //calculate price 
         total = total + Integer.parseInt(object.getQty()) * Integer.parseInt(object.getPrice()); 

        } 


       } 
       Add(responseText.toString(), "5565", String.valueOf(total)); 


       Intent i = new Intent(v.getContext(), ReceiptActivity.class); 



       startActivity(i); 




       Toast.makeText(getApplicationContext(), responseText + " $" + total, 
         Toast.LENGTH_SHORT).show(); 


       SelectAll(); 
       //store in database 

       //go to ReceiptActivity - membership, item, totalprice 

      } 
     }); 


    } 





    public void Add(final String item, final String membership, final String price) 
    { 
     RequestQueue MyRequestQueue = Volley.newRequestQueue(this); 
     String url = server + "/insertorder.php"; 
     StringRequest MyStringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 

      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
      } 
     }) { 
      protected Map<String, String> getParams() { 
       Map<String, String> MyData = new HashMap<String, String>(); 
       MyData.put("item",item); 
       MyData.put("membership",membership); 
       MyData.put("price",price); 

       return MyData; 
      } 
     }; 
     MyRequestQueue.add(MyStringRequest); 
     SelectAll(); 
    } 
    public void SelectAll() 
    { 
     RequestQueue MyRequestQueue = Volley.newRequestQueue(this); 
     String url = server + "/fetchorder.php"; 
     StringRequest MyStringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       try { 
        JSONObject jsonResponse = new JSONObject(response); 
        JSONArray jsonMainNode = jsonResponse.optJSONArray(sql_table); 
        rows.clear(); 
        for(int i=0; i < jsonMainNode.length(); i++) 
        { 
         JSONObject jsonChildNode = jsonMainNode.getJSONObject(i); 
         String order  = jsonChildNode.optString("item").toString(); 
         String membership  = jsonChildNode.optString("membership").toString(); 
         String price = jsonChildNode.optString("price").toString(); 

         rows.add(order + ", " + membership + ", " + price); 
        } 
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(MenuActivity.this, 
          android.R.layout.simple_list_item_1, rows); 
        list.setAdapter(adapter); 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { //Create an error listener to handle errors appropriately. 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       //This code is executed if there is an error. 
      } 
     }); 
     MyRequestQueue.add(MyStringRequest); 
    } 



} 

Receipt-Aktivität (die Seite i wan meine Ergebnisse angezeigt werden)

public class ReceiptActivity extends Activity { 
static public String txtOrder = ""; 
TextView foodorder; 
ArrayList<CustomItem> itemList, selectedList; 


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


    CustomLVAdapter item = (CustomLVAdapter) parent.getItemAtPosition(position); 

    TextView foodorder = (TextView)findViewById(R.id.foodorder); 
    foodorder.setText("Order:" +strOrder+" "); 

Individuelle Adapter

public class CustomLVAdapter extends BaseAdapter { 

    private Context context; 
    LayoutInflater inflater; 
    private ArrayList<CustomItem> objectList; 
    private int[] imageId; 
    public static ArrayList<CustomItem> arl_food=new ArrayList<>(); 

    private class ViewHolder { 
     TextView txt1,txt2,txt3; 
     CheckBox ckBox; 
     ImageView image; 

     NumberPicker np; 
    } 




    public CustomLVAdapter(Context context, ArrayList<CustomItem> objectList,int[]prgmImages){ 
     this.context = context; 
     this.inflater = LayoutInflater.from(context); 
     this.objectList = objectList; 
     this.imageId = prgmImages; 


    } 

    public int getCount(){ 
     return objectList.size(); 
    } 

    public CustomItem getItem (int position) { 
     return objectList.get(position); 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(final int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 


     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.row_checkbox_textview, null); 
      holder.txt1 = (TextView) convertView.findViewById(R.id.txt1); 
      holder.txt2 = (TextView) convertView.findViewById(R.id.txt2); 
      holder.txt3 = (TextView) convertView.findViewById(R.id.txt3); 
      holder.image=(ImageView) convertView.findViewById(R.id.image); 
      holder.ckBox = (CheckBox) convertView.findViewById(R.id.ckBox); 
      holder.np = (NumberPicker) convertView.findViewById(R.id.numberPicker); 
      holder.np.setMinValue(0); 
      holder.np.setMaxValue(10); 






      convertView.setTag(holder); 

      holder.ckBox.setOnClickListener(new View.OnClickListener() { 
               public void onClick(View v) { 
                CheckBox cb = (CheckBox) v; 
                CustomItem object = (CustomItem) cb.getTag(); 
                Toast.makeText(context, 
                  "You have selected: " + object.getItem() + 
                    "Price: " + object.getPrice() + 
                    "Qty: " + object.getQty(), 
                  Toast.LENGTH_LONG).show(); 
                object.setSelected(cb.isChecked()); 

               } 
              } 
      ); 

      holder.np.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { 
       @Override 
       public void onValueChange(NumberPicker picker, int oldVal, int newVal) { 
        NumberPicker p = picker; 
        CustomItem object = (CustomItem) p.getTag(); 
        object.setQty(String.valueOf(newVal)); 

       } 
      }); 
     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     CustomItem object = objectList.get(position); 
     holder.txt1.setText(object.getItem()); 
     holder.txt2.setText(object.getDesc()); 
     holder.txt3.setText(object.getPrice()); 

     holder.np.setTag(object); 
     holder.image.setImageResource(imageId[position]); 
     holder.ckBox.setChecked(object.isSelected()); 
     holder.ckBox.setTag(object); 

     return convertView; 
    } 
} 
+0

In dieser Zeile CustomLVAdapter item = (CustomLVAdapter) parent.getItemAtPosition (position); Woher kommt der Elternteil? –

Antwort

0

Es sieht aus wie Sie bereits eine Aktivität starten wenn der Absenden-Button angeklickt wird. Jetzt musst du nur ein paar Extras in der Absicht, die du erstellst, weitergeben.

Also, wenn Sie die Absicht zu machen, sollten Sie auch tun:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_receipt); 
    int price = getIntent().getStringExtra("PRICE"); 
    String membership = getIntent().getStringExtra("MEMBERSHIP"); 
    CustomItem item = getIntent().getStringExtra("ITEM"); 
    ... 

Eine Einschränkung:

... 
Intent i = new Intent(v.getContext(), ReceiptActivity.class); 
i.putExtra("PRICE", price); 
i.putExtra("MEMBERSHIP", membership); 
i.putExtra("ITEM", item); 
startActivity(i); 
... 

Dann in Ihre neue Tätigkeit finden Sie die Extras in Ihrem onCreate Methode wie folgt ausgelesen ! Es sieht so aus, als ob Sie Ihre Objekte mit dem Objekt CustomItem darstellen. Um das als Extra zu übergeben, muss Parcelable implementiert werden. Wenn Sie Parcelable implementieren, definieren Sie, wie Sie das Objekt und seine Felder in ein "Paket" umwandeln und wie Sie ein "Paket" in Ihr Objekt zurückverwandeln. Die google docs give a pretty good example dafür.

Ich log, ein weiterer Vorbehalt! Ich würde empfehlen, dass Sie die Schlüssel für die Extras "public static final String" in Ihrer ReceiptActivity erstellen. Auf diese Weise wird es einfacher, sie zu verwalten.

+0

Auch eine Empfehlung: Versuchen Sie zunächst, nur einen Teil der Informationen zwischen den Aktivitäten zu übergeben. Sobald Sie das zur Arbeit bekommen, machen Sie das nächste. Speichern Sie Ihr CustomItem-Objekt zuletzt. –

+0

Danke, es hat funktioniert! – goh