2016-09-06 59 views
0

这是我收到的listview如何设置自定义列表视图根据itemname按字母顺序?

我想按字母顺序显示相应的我与模型类的帮助下设置的名称列表从服务器和显示数据的方法。 pojoRestaurant.setRestroName(jsonObject.getString("RestaurantName"));

我想显示相应的列表RestaurantName.can谁告诉我我该怎么做?

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

        Log.e("responcefilterlist....", response); 

        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"); 
          mPaymentMethodList.add(jsonObject.getString("PaymentOptions")); 

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

          if (jsonObject.getString("OpenStatus").equals("true")) { 
           pojoRestaurant.setOpenClose("Open"); 
          } else { 
           pojoRestaurant.setOpenClose("Close"); 
          } 

          mAllList.add(pojoRestaurant); 
          mDataList.add(pojoRestaurant); 
          //mDeliveryList.add(jsonObject.getString("DeliveryTime")); 
          // mCuisineTypeList.add(jsonObject.getString("RestaurantName")); 
         } 

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

     Log.e("foodid", "" + foodid); 
     Log.e("areaid", "" + 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); 

}

这是我Adpater类

public class RestroListBaseAdapter extends BaseAdapter { 

    private ArrayList<PojoRestaurant> mList; 
    private Context mContext; 
    private ViewHolder viewHolder; 
    private ArrayList<PojoRestaurant> suggestion = new ArrayList<>(); 

    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; 

    } 
} 
+1

使用'Comparator'。 – Piyush

+0

@Piyush是啊!我知道,但在自定义列表视图中,我该如何做到这一点?你能解释我吗? – LoveAndroid

+0

http://stackoverflow.com/questions/22314009/how-to-sort-arraylist-using-comparator – anddevmanu

回答

1

你只需要排序,该列表与服务器返回的字母顺序,然后添加这个列表直接到你的列表视图。

例如你有一个模型类:

public class Restaurant { 
    String restaurantName; 
    int restaurantStar; 
} 

你应该实现Comparator接口该类:

public class Restaurant implements Comparator<Restaurant> { 
     String restaurantName; 
     int restaurantStar; 

    @Override 
    public int compare(Schedule s1, Schedule s2) { 
     // because class String has already implemented Comparator. just get that 
     return s1.restaurantName.compare(s2.restaurantName); 
    } 
} 

最后,你可以排序的餐馆这个名单:

// get somewhere on network 
List<Restaurant> restaurants; 
Collection.sort(restaurants); 

最后你可以直接把这个列表分配给listview。例如:

adapter.setData(restaurants); 
// refresh listview so listview will display new sorted data 
adapter.notifyDataSetChanged(); 

这里是另一个例子,使用Comparatorcomparator tutorial

+1

这也是正确的答案! thanq @hqt – LoveAndroid

1

首先,你需要对列表进行排序(取决于你的逻辑,即按字母顺序),你已经习惯设定适配器然后通知列表适配器。

您可以使用自己的比较器对列表进行排序。

Comparator示例代码:

Comparator comparator = new Comparator() { 

    public int compare(PojoRestaurant restro1, PojoRestaurant restro2) { 

     String restroName1 = restro1.getRestroName.toUpperCase(); 
     String restroName2 = restro2.getRestroName.toUpperCase(); 

     //ascending order 
     return restroName1.compareTo(restroName2); 

     //descending order 
     //return restroName2.compareTo(restroName1); 
    } 

}; 

然后,你可以用下面的代码对列表进行排序

Collections.sort(yourList, collection) 
+0

我不知道如何使用比较器来排序列表!你能解释我吗?我怎样才能做到这一点 ?? – LoveAndroid