2016-09-07 5 views
0

Ich bekomme Daten von der json.and in der Listview angezeigt. Ich sortierte die Listview nach dem Namen mit Comparator.Das Problem ist, dass, wenn ich auf die sortierte Listview klicken, es die ID des ersten Elements nicht die ID des sortierten Elements bekommt.Kann jemand mir sagen, wie kann ich dieses Problem lösen?Wie wird die ausgewählte Artikel-ID in der Listenansicht angezeigt, während die Listenansicht nach dem Namen sortiert wird?

Das ist mein json Daten: -

{ 
    "status": 1, 
    "StatusMessage": "Restaurent List", 
    "data": [ 
    { 
     "ID": "7", 
     "RestaurantName": "Water Lemon", 
     "MinimumOrder": "20.000", 
     "DeliveryTime": "", 
     "OpenStatus": true, 
     "PaymentOptions": "VISA, MasterCard , Maestro , American Express", 
     "Is New Restaurant": true, 
     "Is Provide Offer": true 
    }, 
    { 
     "ID": "8", 
     "RestaurantName": "Casper and Gambini", 
     "MinimumOrder": "40.000", 
     "DeliveryTime": "", 
     "OpenStatus": true, 
     "PaymentOptions": "VISA, MasterCard , Maestro , American Express", 
     "Is New Restaurant": true, 
     "Is Provide Offer": true 
    }, 
    { 
     "ID": "11", 
     "RestaurantName": "B L E N D S", 
     "MinimumOrder": "50.000", 
     "DeliveryTime": "", 
     "OpenStatus": true, 
     "PaymentOptions": "VISA, MasterCard , Maestro , American Express", 
     "Is New Restaurant": true, 
     "Is Provide Offer": true 
    }, 
    { 
     "ID": "12", 
     "RestaurantName": "khyber Indian Cuisine", 
     "MinimumOrder": "5.000", 
     "DeliveryTime": "", 
     "OpenStatus": true, 
     "PaymentOptions": "VISA, MasterCard , Maestro , American Express", 
     "Is New Restaurant": true, 
     "Is Provide Offer": true 
    }, 
    { 
     "ID": "13", 
     "RestaurantName": "Khyber Indian", 
     "MinimumOrder": "5.000", 
     "DeliveryTime": "", 
     "OpenStatus": true, 
     "PaymentOptions": "VISA, MasterCard , Maestro , American Express", 
     "Is New Restaurant": true, 
     "Is Provide Offer": true 
    }, 
    { 
     "ID": "14", 
     "RestaurantName": "test", 
     "MinimumOrder": "10.000", 
     "DeliveryTime": "", 
     "OpenStatus": true, 
     "PaymentOptions": "VISA, MasterCard , Maestro , American Express", 
     "Is New Restaurant": true, 
     "Is Provide Offer": true 
    }, 
    { 
     "ID": "15", 
     "RestaurantName": "yahoo", 
     "MinimumOrder": "5.000", 
     "DeliveryTime": "", 
     "OpenStatus": true, 
     "PaymentOptions": "VISA, MasterCard , Maestro , American Express", 
     "Is New Restaurant": true, 
     "Is Provide Offer": true 
    }, 
    { 
     "ID": "16", 
     "RestaurantName": "Khaber", 
     "MinimumOrder": "3.000", 
     "DeliveryTime": "", 
     "OpenStatus": true, 
     "PaymentOptions": "VISA, MasterCard , Maestro , American Express", 
     "Is New Restaurant": true, 
     "Is Provide Offer": true 
    }, 

Dies ist die Methode(), wo ich die json und zeigt in der Listenansicht Parsen: -

public void requestRestaurantSearchByFilter_list() { 
    mProgressDialog.show(); 
     StringRequest restrolistrequestfilter = new StringRequest(Request.Method.POST, GlobalData.SEARCHBYFILTERURL, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         try { 

          mProgressDialog.dismiss(); 
          mPaymentMethodList.clear(); 
          mDataList.clear(); 
          mAllList.clear(); 
          mAdapter.notifyDataSetChanged(); 



          JSONObject jObject = new JSONObject(response); 
          if (jObject.getString("status").equals("1")) { 


           JSONArray jsonArray = jObject.getJSONArray("data"); 
           for (int i = 0; i < jsonArray.length(); i++) { 


            JSONObject jsonObject = jsonArray.getJSONObject(i); 
            PojoRestaurant pojoRestaurant = new PojoRestaurant(); 


            pojoRestaurant.setRestroName(jsonObject.getString("RestaurantName")); 
            pojoRestaurant.setDeliveryTime(jsonObject.optString("DeliveryTime")); 
            pojoRestaurant.setPaymentOption(jsonObject.getString("PaymentOptions")); 
            pojoRestaurant.setMinimumOrder(jsonObject.getString("MinimumOrder")); 


            if (jsonObject.getString("ImageUrl").equals("") || jsonObject.getString("ImageUrl") == "null") { 


            } else { 


             pojoRestaurant.setRestroImage(jsonObject.getString("ImageUrl")); 

            } 

            id = jsonObject.getString("ID"); 

            pojoRestaurant.setRestroId(id); 

            mPaymentMethodList.add(jsonObject.getString("PaymentOptions")); 


            if (jsonObject.getString("OpenStatus").equals("true")) { 

             pojoRestaurant.setOpenClose("Open"); 


            } else { 
             pojoRestaurant.setOpenClose("Close"); 


            } 

            mAllList.add(pojoRestaurant); 
            mDataList.add(pojoRestaurant); 

            Collections.sort(mDataList, RestaurantList.getCompByName()); 

            getpaymentId.add(id); 
            getListViewId.add(id); 
            } 

           mListView.setAdapter(mAdapter); 
           mAdapter.notifyDataSetChanged(); 

          } else { 

          } 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError volleyError) { 

         Log.e("error", "" + volleyError.getMessage()); 
         if (volleyError.getMessage() == null) 
          requestRestaurantSearchByFilter_list(); 


        } 
       }) { 


      @Override 
      protected Map<String, String> getParams() throws AuthFailureError { 

       Map<String, String> params = new HashMap<String, String>(); 

       String foodid = getArguments().getString("FOODID"); 
       String areaid = getArguments().getString("AREAID"); 



       params.put("DeliveryAreaID", areaid); 
       params.put("ProvideOffers", "0"); 
       params.put("NewRestaurant", "0"); 
       params.put("PaymentMethod", "0"); 
       params.put("OpenRestaurant", "0"); 
       params.put("FoodID", foodid); 

       return params; 
      } 


     }; 

     RequestQueue restrolistqueuefilter = Volley.newRequestQueue(getContext()); 
     restrolistrequestfilter.setShouldCache(false); 
     restrolistqueuefilter.add(restrolistrequestfilter); 


    } 

Das ist mein Vergleicher Methode() bei dem ich die listview entsprechend auf den restro-namen setze. : -

public static Comparator<PojoRestaurant> getCompByName() { 
     Comparator<PojoRestaurant> comp = new Comparator<PojoRestaurant>() { 
      @Override 
      public int compare(PojoRestaurant lhs, PojoRestaurant rhs) { 
       return lhs.RestroName.compareTo(rhs.RestroName); 
      } 
     }; 
     return comp; 
    } 

Im Folgenden sind die auf Klick listner auf Listenansicht, wo ich die Position des Listview-Elements erhalten und die ID des Listview-Elements erhalten: -

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       mListViewItemId = getListViewId.get(i); 
      Fragment fragment = new RestrurantName(); 
       Bundle b = new Bundle(); 
       b.putString("ListViewitemId", mListViewItemId); 

       fragment.setArguments(b); 


       getFragmentManager().beginTransaction().replace(R.id.frame, fragment).addToBackStack(null).commit(); 
       toolbar.setTitle("Restaurant Name"); 

      } 
     }); 

Wo getListViewId ein Array Liste des Zeichenkettentyps

Das ist mein Adapter Klasse: -

public class RestroListBaseAdapter extends BaseAdapter { 

    private ArrayList<PojoRestaurant> mList; 
    private Context mContext; 
    private ViewHolder viewHolder; 


    public RestroListBaseAdapter(Context mContext, ArrayList<PojoRestaurant> mList) { 

     this.mContext = mContext; 
     this.mList = mList; 


    } 


    @Override 
    public int getCount() { 
     if (mList != null) { 
      return mList.size(); 

     } 


     return 0; 
    } 

    @Override 
    public Object getItem(int position) { 
     return mList.get(position); 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     int lastPosition = -1; 
     LayoutInflater layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) { 
      convertView = layoutInflater.inflate(R.layout.restaurant_item, parent, false); 
      viewHolder = new ViewHolder(); 
      viewHolder.RestroName = (TextView) convertView.findViewById(R.id.tv_restro_name); 
      viewHolder.OpenClose = (TextView) convertView.findViewById(R.id.tvOpenClose); 
      viewHolder.MinimumOrder = (TextView) convertView.findViewById(R.id.tv_minimun_order); 
      viewHolder.DeliveryTime = (TextView) convertView.findViewById(R.id.tv_delivery_time); 
      viewHolder.PaymentOption = (TextView) convertView.findViewById(R.id.tv_Payment); 
      viewHolder.RestroImage = (ImageView) convertView.findViewById(R.id.img_restro_list); 


     } else { 

      viewHolder = (ViewHolder) convertView.getTag(); 


     } 


     Animation animation = AnimationUtils.loadAnimation(mContext, (position > lastPosition) ? R.anim.up_from_bottom : R.anim.down_from_top); 
     convertView.startAnimation(animation); 
     lastPosition = position; 


     convertView.setTag(viewHolder); 

     PojoRestaurant pojoRestaurant = (PojoRestaurant) getItem(position); 

     viewHolder.RestroName.setText(pojoRestaurant.getRestroName()); 
     viewHolder.DeliveryTime.setText(pojoRestaurant.getDeliveryTime()); 
     viewHolder.MinimumOrder.setText(pojoRestaurant.getMinimumOrder()); 
     viewHolder.OpenClose.setText(pojoRestaurant.getOpenClose()); 
     viewHolder.PaymentOption.setText(pojoRestaurant.getPaymentOption()); 
     Picasso.with(mContext).load(pojoRestaurant.getRestroImage()).into(viewHolder.RestroImage); 


     return convertView; 
    } 



    private class ViewHolder { 
     private TextView RestroName, OpenClose, MinimumOrder, DeliveryTime, PaymentOption; 
     private ImageView RestroImage; 

    } 


} 

Problem: - Wenn ich das Element aus der Listenansicht wählen die ID (mListViewItemId) nimmt entsprechend der json-ID. Ich möchte, wenn ich den bestimmten Artikel wähle die ID dieses Artikels. In meinem Fall, wenn ich Restro Name (B L E N D S) es unter der ID 7. Bitte sehen Sie meine Json und sagen Sie mir, wie kann ich das tun?

+0

Können Sie Ihren Adapter posten? – JamieB

+0

eigentlich hast du kurze restorant-namen, aber id ist nicht kurzgeschlossen, warum hast du dich geirrt. versuchen Sie, Position von ID aus Listenansicht Element zu finden, dann ID .. es wird funktionieren – Ashish

+0

@Ashish Sie sind richtig! aber ich weiß nicht wie ich das machen kann! kannst du es mir bitte sagen . – LoveAndroid

Antwort

0

Von Ihrem Code kann ich sehen, dass Sie die mDataList Arraylist sortiert haben, um die sortierte Liste zu erhalten. Aber Sie haben die ID-Liste in einer separaten Liste gespeichert, die getListViewId ist, die Sie nicht sortiert haben. Wenn Sie Ihre mDataList sortieren, müssen Sie auch Ihre getListViewId Liste sortieren, um die richtige Liste zu erhalten.

Aber ich würde vorschlagen, dass Sie die Liste Artikel-ID von Ihrem mDataList wie dies Sie führen unter

mListViewItemId = mDataList.get(i).getRestroId(); 

Hoffnung nur zu bekommen. Lassen Sie mich wissen, wenn eine Frage.

+0

Durch diese mlistViewItemId = mDataList.get (i) .getRestroId(); es gibt dem Restro-Namen nicht die ID. und noch etwas wie kann ich die getListViewId wo getListViewId ist eine arraylist von string type. – LoveAndroid

+0

@LoveAndroid Sie haben das Restroid bereits in Ihrer Listenansicht gespeichert. Sie können es nur an der Position des ausgewählten Listeneintrags abrufen. Probieren Sie einfach die Codezeile in Ihrem 'onItemClick'-Listener. – GrIsHu

+0

@GrlsHu danke! es funktioniert gut! – LoveAndroid

Verwandte Themen