2016-06-05 2 views
1

나는 Adapter과 함께 사용자 정의 ListView을 포함하는 Fragment을 가지고 있습니다. 이 목록에 표시되는 것은 다음과 같은 일부 의사의 특성입니다. picture, name, 및 gender.버튼을 사용하여 사용자 정의 목록보기 필터링 (안드로이드)

버튼을 누를 때 gender으로 의사를 필터링하고 싶습니다. 기본값으로 모든 의사가 표시되도록 남성 버튼이 모든 남성을 표시하고 여성 버튼이 모두 여성을 표시합니다. 여기

Example in this image

내 조각 코드입니다 (아래 그림 참조) :

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; 

} 

} 
+0

귀하의 질문에 정확히 무엇 : 당신의 조각 onCreateView에서

? –

+0

각 단추를 눌렀을 때 어떻게 ListView에 남녀를 표시 할 수 있습니까? 'gender'값을 필터로 사용 –

+0

[this] (https://gist.github.com/pskink/1cc7435461fee1c90d1ed311dd1c3e82) "사용자 정의 필터 준비"배열 어댑터 – pskink

답변

0

어댑터에서 두 개의 배열을 사용하십시오. 저장 용으로 하나를 사용하고 현재 표시된 항목 용으로 하나를 사용하십시오.

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 
} 

사용법 :

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(); 
    } 
}); 
+0

최적의 솔루션이 아니지만 작업을 수행해야합니다. 끝난. – damjanh

+0

내 의사 클래스 버튼에서 filterMales 메소드에 어떻게 액세스합니까? –

+0

@CarlosCampos 사용 예제를 추가했습니다. "모두"버튼도 동일하게 만들어야합니다. – damjanh

관련 문제