簡體   English   中英

使用按鈕(Android)過濾自定義Listview

[英]Filter a custom Listview using Buttons (Android)

我有一個Fragment包含自定義ListView與自定義Adapter 我在這個列表中顯示的是一些醫生的屬性是: picturenameagegender

我想做的是按下按鈕時按gender過濾醫生。 因此默認顯示所有醫生,男性按鈕將顯示所有男性,女性按鈕顯示所有女性。 (如下圖所示)

此圖中的示例

這是我的片段代碼:

public class Doctors extends Fragment {


String[] names =  {"Richard Johnson", "William Perez", "Jennifer Fields", "Caroline Marin", "John Smith"};
String[] ages =  {"25", "32", "41", "31", "29"};
String[] gender = {"Male", "Male", "Female", "Female", "Male"};
int[] images = { R.drawable.delete_doctora,R.drawable.delete_doctora,R.drawable.delete_doctora,R.drawable.delete_doctora,R.drawable.delete_doctora,};

ListView list;
ArrayAdapter<DocItem> adapter;
ArrayList<DocItem> arrayList;


@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState){
    View view = inflater.inflate(R.layout.activity_doctors, container, false);

    arrayList = new ArrayList<DocItem>();

    for(int i = 0; i < 5; i++){
        arrayList.add(i,new DocItem(names[i], ages[i], gender[i], images[i]));
    }

    adapter = new DocAdapter(getActivity(), arrayList);
    list = (ListView) view.findViewById(R.id.ListDocs);

    list.setAdapter(adapter);
    list.setTextFilterEnabled(true);


    return view;
}

}

我的定制適配器:

public class DocAdapter extends ArrayAdapter<DocItem> {

private Context context;
private ArrayList<DocItem> _values;

public DocAdapter(Context context, ArrayList<DocItem> values) {
    super(context, 0, values);
    this.context = context;
    _values = new ArrayList<DocItem>();
    _values.addAll(values);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.doc_list_row, parent, false);
    TextView txtName = (TextView) rowView.findViewById(R.id.Name);
    TextView txtAge = (TextView) rowView.findViewById(R.id.Age);


    ImageView imageView = (ImageView) rowView.findViewById(R.id.Pic);
    txtName.setText(_values.get(position)._name);
    txtAge.setText(_values.get(position)._age);
    imageView.setImageResource(_values.get(position)._picture);

    return rowView;
}
}

項目:

public class DocItem {

public String _name, _age, _gender;
int _picture;

public DocItem(String name, String age, String gender, int picture){
    _name = name;
    _age = age;
    _picture= picture;
    _gender = gender;

}

}

在適配器中使用兩個數組。 使用一個用於存儲,一個用於當前顯示的項目。

private ArrayList<DocItem> all_values;         //All items
private ArrayList<DocItem> filter_values;    //Shown items

public DocAdapter(Context context, ArrayList<DocItem> values) {
    ...
    all_values = new ArrayList<DocItem>();
    all_values.addAll(values);
    filter_values = all_values.clone();
}    

...

 @Override
public int getCount() {
    return filter_values.size();
}

public void noFilter() {
    filter_values = all_values;
    notifyDataSetChanged();
}

public void filterMales() {
    filterGender("Male");
}

public void filterFemales() {
    filterGender("Female");
}

private void filterGender(String gender) {
    filter_values = new ArrayList<>();
    for(DocItem doc : all_values) {
       if(doc._gender.equals(gender)) {
           filter_values.add(doc);
       }
    }
notifyDataSetChanged();
}

@Override
public View getView(int position, View convertView, ViewGroup parent)     {
!!! USE filter_values array
}

用法:

在片段onCreateView中:

Button buttonMales = (Button) findViewById(R.id.filterMales);
Button buttonFemales = (Button) findViewById(R.id.filterFemales);

buttonMales.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        adapter.filterMales();
    }
});

buttonFemales.setOnClickListener(new View.OnClickListener() {
   @Override
    public void onClick(View view) {
        adapter.filterFemales();
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM