車の名前、車の詳細などのリストビューがあります。私はその名前で車を探しています。スピナーでリストビューをフィルタリングした後、検索ボックス(edittext)
私はその現在の状態(...、停止、実行)を使用して、Androidのスピナーその後
で車をフィルタリングし、私は次のスピナーに(editetextを使用して)、検索ボックスに入力し、車の名。 Spinnerでステータスを選択して車をフィルタリングする必要があります。
私はそれらを別々に行う方法を知っていますが、一緒には使用できません。スピナーフィルターと検索フィルターを組み合わせるにはどうすればよいですか?本当に助けに感謝!
CarlistFragment1CarListFragment2
カー(モデル)リストビューを作成するときに、私は通常通りセッターとゲッターメソッドがあります。
CarAdapterコード:
//This car list adapter class provides data to list view
public class CarListAdapter extends BaseAdapter implements Filterable{
private Context context;
private LayoutInflater inflater;
private List<Car> carList; // Original Data
private List<Car> carListSpinnerFiltered; // spinner filtered data
//private List<Car> carListSearchFiltered; // search filtered data
private ValueFilter valueFilter;
private ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public CarListAdapter(Context context, List<Car> carList) {
this.context = context;
this.carList = carList;
this.carListSpinnerFiltered = carList;
//this.carListSearchFiltered = carList;
}
@Override
public int getCount() {
return carList.size();
}
@Override
public Object getItem(int position) {
return carList.get(position);
}
@Override
public long getItemId(int position) {
// return position;
return carList.indexOf(getItem(position));
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (inflater == null)
inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null)
convertView = inflater.inflate(R.layout.list_row_carlist, null);
if (imageLoader == null)
imageLoader = AppController.getInstance().getImageLoader();
NetworkImageView thumbNail = (NetworkImageView) convertView
.findViewById(R.id.car_image);
TextView devname = (TextView) convertView.findViewById(R.id.devname);
TextView location = (TextView) convertView.findViewById(R.id.location);
TextView status = (TextView) convertView.findViewById(R.id.status);
TextView speed = (TextView) convertView.findViewById(R.id.speed);
// getting vehicle data for the row
final Car c = carList.get(position);
// thumbnail image
// thumbNail.setImageUrl(c.getImageURL(), imageLoader);
// device name
devname.setText(c.getDevname());
// location
if (c.getLocation().equals("")) {
location.setText(String.valueOf("Location unknown"));
} else {
location.setText(String.valueOf(c.getLocation()));
}
// status
switch (c.getStatus()) {
case "run":
status.setText(String.valueOf(statusRun));
status.setTextColor(ContextCompat.getColor(context.getApplicationContext(), R.color.colorCarRun));
break;
case "stop":
status.setText(String.valueOf(statusStop));
status.setTextColor(ContextCompat.getColor(context.getApplicationContext(), R.color.colorCarStop));
break;
case "lost_gprs":
status.setText(String.valueOf(statusLostGprs));
status.setTextColor(ContextCompat.getColor(context.getApplicationContext(), R.color.colorBlack));
break;
case "lost_gps":
status.setText(String.valueOf(statusLostGps));
status.setTextColor(ContextCompat.getColor(context.getApplicationContext(), R.color.colorffbf00));
break;
case "expired":
status.setText(String.valueOf("Expired"));
status.setTextColor(ContextCompat.getColor(context.getApplicationContext(), R.color.colorBlue));
break;
}
// speed
speed.setText(String.valueOf(c.getSpeed()));
return convertView;
}
@Override
public Filter getFilter() {
if (valueFilter == null) {
valueFilter = new ValueFilter();
}
return valueFilter;
}
private class ValueFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
// Search Field
// if (constraint != null && constraint.length() > 0) {
// ArrayList<Car> filterList = new ArrayList<>();
//
// for (int i = 0; i < carListSearchFiltered.size(); i++) {
//
// String devname = carListSearchFiltered.get(i).getDevname().toUpperCase();
// String inputString = constraint.toString().toUpperCase();
//
// if (devname.contains(inputString)) {
// Car car = new Car();
// car.setDevname(carListSearchFiltered.get(i).getDevname());
// car.setLocation(carListSearchFiltered.get(i).getLocation());
// car.setStatus(carListSearchFiltered.get(i).getStatus());
// car.setSpeed(carListSearchFiltered.get(i).getSpeed());
// car.setDevid(carListSearchFiltered.get(i).getDevid());
// filterList.add(car);
// }
//
//
// } // end for loop
//
// results.count = filterList.size();
// results.values = filterList;
//
// } else {
// results.count = carListSearchFiltered.size();
// results.values = carListSearchFiltered;
// }
// Spinner Filter
String inputStatus = constraint.toString();
if (!inputStatus.equals("All")) {
ArrayList<Car> spinnerList = new ArrayList<>();
for (int i = 0; i < carListSpinnerFiltered.size(); i++){
String carStatus = carListSpinnerFiltered.get(i).getStatus();
switch (carStatus){
case "run":
carStatus = "run";
break;
case "stop":
carStatus = "stop";
break;
case "lost_gprs":
carStatus = "lost_gprs";
break;
case "lost_gps":
carStatus = "lost_gps";
break;
default:
Toast.makeText(context, "status unknown", Toast.LENGTH_SHORT).show();
break;
} // end switch
if (carStatus.equals(inputStatus)) {
Car car = new Car();
car.setDevname(carListSpinnerFiltered.get(i).getDevname());
car.setLocation(carListSpinnerFiltered.get(i).getLocation());
car.setStatus(carListSpinnerFiltered.get(i).getStatus());
car.setSpeed(carListSpinnerFiltered.get(i).getSpeed());
car.setDevid(carListSpinnerFiltered.get(i).getDevid());
spinnerList.add(car);
}
} // end for loop
results.count = spinnerList.size();
results.values = spinnerList;
} else {
results.count = carListSpinnerFiltered.size();
results.values = carListSpinnerFiltered;
}
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
carList = (List<Car>) results.values;
notifyDataSetChanged();
}
} // end class
}
あなたのコメントをありがとうが、私はまだそれほど多くのことを理解していません。私は両方のフィルターを同時に実装することはできません。スピナーは、現在選択されている状態のすべての車を表示することです。そのときだけ、ユーザーはスピナー結果内の特定の車をフィルターにかけたいと思う。問題は、performFilter()が1つの制約だけを取ることです。リストビューを複数の制約で別々にフィルタリングするにはどうすればよいですか?これはきつい。私はこの男を解決することはできません! –
私のアイデアをコードで少し完成させましたが、それは助けになりますか?あなたは理解できない部分をもっと説明できますか? – Xiao
私はまだ試しています –