2016-09-07 12 views
0

json.andからのデータを取得していて、リストビューに表示しています。 Comparator.The問題を使用してリストビューをソートしました。ソートされたリストビューをクリックすると、ソートされたitem.canのIDではなく、最初のアイテムのIDが取得されます。リストビューが名前に従ってソートされているときに、選択したアイテムIDをリストビューで取得する方法はありますか?

これは私のJSONデータである: -

{ 
    "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 
    }, 

これはメソッドです()私はJSONを解析し、リストビューに表示どこに: -

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); 


    } 

これは私のコンパレータ方式です()私はそれに応じてrestro名に応じてlistviewを設定します。 : -

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; 
    } 

次は私がリストビューアイテムの位置を取得し、リストビューアイテムのIDを取得し、リストビュー上でのクリックでのリスナーである: -

getListViewIdが配列である
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"); 

      } 
     }); 

文字列型のリスト

これは私のアダプタクラスである: - :私はID(mListViewItemId)はJSON IDに応じて取っているリストビューから項目を選択すると -

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; 

    } 


} 

問題。私は特定のアイテムを選択するときに、そのアイテムのIDを取得したい。 私の場合、Restro name(B L E N D S)を選択すると、IDを取得します。7.私のjsonを見て、どうすればいいですか?

+0

アダプターを掲示できますか? – JamieB

+0

実際にあなたは短い修復者の名前を持っていますが、IDが短絡していないので、間違っています。リストビューの項目からIDの位置を見つけようとすると、IDを取得します。それは動作します – Ashish

+0

@Ashishあなたは正しいです!しかし、私はどのようにこれを行うことができますか分からない!どうか教えてください。 – LoveAndroid

答えて

0

あなたのコードから、mDataList arraylistをソートしてリストをソートしていることが分かります。しかし、idのリストは別のリストに格納されています。これはソートされていないgetListViewIdです。

mDataListをソートする場合は、getListViewIdリストをソートして適切なリストを取得する必要があります。

しかし、私はあなたがこれだけご案内します

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

希望以下のようにあなたのmDataListからリスト項目のIDを取得することをお勧め。質問があれば教えてください。

+0

これまでにはmListViewItemId = mDataList.get(i).getRestroId();それはidではなくrestro名前を与える。 getListViewIdが文字列型のarraylistであるgetListViewIdをどのようにソートすればいいですか? – LoveAndroid

+0

@LoveAndroid既にリストビューにrestroidが保存されています。あなたは選択されたリスト項目の位置だけでそれを得ることができます。 'onItemClick'リスナーの中でコード行を試してみてください。 – GrIsHu

+0

@GrlsHu thanx!それはうまく動作します! – LoveAndroid

関連する問題