Я пытаюсь выяснить, как я могу применить mutiple фильтр (TextBox и другое поле) к списку.Больше чем одно поле фильтра для ListViews
Прямо сейчас, я фильтрую текстовым полем, но я хочу добавить checkbok и строки фильтра, если у них есть поле с истинным или ложным значением. Таким образом, я мог применять оба фильтра одновременно.
Прямо сейчас, что я получил это это:
public class ListUsersDialog extends AbstractDialog {
//TODO
private Button okButton;
private Button cancelButton;
private ListView lv;
//private ArrayAdapter<String> adapter;
private ArrayAdapter<UserResponse> adapter;
private EditText inputSearch;
private EditText inputSearch2;
private String room;
//private String users[] = {};
private UserResponse users[] = {};
public ListUsersDialog() {
super();
// TODO Auto-generated constructor stub
}
public ListUsersDialog(String room) {
this.room = room;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_list_users, container);
//Se consulta por la lista de los usuarios, los parametros que se pasan es por si se quiere customizar el resultado en el futuro.
AsyncGUI asyncDialogs = new AsyncGUI(this);
asyncDialogs.execute(new RequestMessage(ConstantsRooms.GET_USERS, room , ((AbstractActivity)getActivity()).getUserName()));
getDialog().setTitle("Invitar a usuarios");
// Listview Data
lv = (ListView) view.findViewById(R.id.list_view_users);
inputSearch = (EditText) view.findViewById(R.id.inputSearch);
// Adding items to listview
//adapter = new ArrayAdapter<String>(this.getActivity(), R.layout.list_item_user, R.id.userNameSendInvitation, users);
adapter = new ArrayAdapter<UserResponse>(this.getActivity(), R.layout.list_item_user, R.id.userNameSendInvitation, users);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// selected item
String userToSendMessage = (String)parent.getAdapter().getItem(position);
//Se hace una llamada a GCM con el usuario que crea la partida y a quien va dirigida la invitacion
AsyncGUI async = new AsyncGUI(ListUsersDialog.this);
async.execute(new RequestMessage(ConstantsRooms.SEND_GCM_MESSAGE_INVITATION,
((AbstractActivity)getActivity()).getUserName(),
room,
userToSendMessage));
}
});
//Filter.
inputSearch.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
ListUsersDialog.this.adapter.getFilter().filter(cs);
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
@Override
public void afterTextChanged(Editable arg0) {
}
});
}
Я думаю, это самый типичный код, я не знаю, если кто-то может дать мне некоторые подсказки, чтобы делать то, что я м пытается.
Это мой адаптер:
public class CustomUsersAdapter extends ArrayAdapter<UserResponse> {
private List<UserResponse> usersList;
private Context context;
public CustomUsersAdapter(List<UserResponse> usersList, Context ctx) {
super(ctx, R.layout.list_item_user, usersList);
this.usersList = usersList;
this.context = ctx;
}
public View getView(int position, View convertView, ViewGroup parent) {
// First let's verify the convertView is not null
if (convertView == null) {
// This a new view we inflate the new layout
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item_user, parent,
false);
}
// Now we can fill the layout with the right values
TextView name = (TextView) convertView
.findViewById(R.id.txt_userNameSendInvitation);
TextView isFriend = (TextView) convertView
.findViewById(R.id.txt_friend);
UserResponse user = usersList.get(position);
name.setText(user.getUserName());
isFriend.setText("Friend:" + user.isbFriend());
return convertView;
}
public int getCount() {
return usersList.size();
}
public UserResponse getItem(int position) {
return usersList.get(position);
}
public long getItemId(int position) {
return usersList.get(position).hashCode();
}
}
Даже, если создать фильтр в моем адаптере, я не могу понять, как я фильтр для двух разных областей, потому что мне нужно два фильтра классы, и я думаю, что это невозможно ... или не так ли?
РЕШЕНИЕ: How to apply multiple Filters on an Adapter?
Я нуб с Android, я используя класс, который он расширяет ArrayAdapter прямо сейчас. Я не получаю данные из базы данных, и я думаю, что CursorAdapter для этого. Я видел, что могу разработать свой собственный фильтр в своем адаптере, но это будет только одно поле. – Guille
Решение http://stackoverflow.com/questions/11390890/how-to-apply-multiple-filters-on-an-adapter – Guille