Вот мой ArrayAdapter класс,показать или скрыть виджет в ListView Когда флажок установлен или незарегистрированный Android
public class HAAR extends ArrayAdapter<HAM> {
Context context;
ArrayList<HAM> selectedhospital;
ViewHolder viewHolder = null;
public HAAR(Context context, int resourceId,
ArrayList<HAM> selectedhospital) {
super(context, resourceId, selectedhospital);
this.context = context;
this.selectedhospital = new ArrayList<HAM>();
this.selectedhospital.addAll(selectedhospital);
}
// View lookup cache
private static class ViewHolder {
TextView name;
TextView home;
CheckBox chk_hospitallist;
RadioButton rbt_primarylocation;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ArrayList<String> hospitalid = new ArrayList<>();
LayoutInflater mInflater = (LayoutInflater) context
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
// If there's no view to re-use, inflate a brand new view for row
convertView = mInflater.inflate(R.layout.ha_list_item_name, null);
viewHolder = new ViewHolder();
viewHolder.name = (TextView) convertView.findViewById(R.id.txt_ha_name);
viewHolder.home = (TextView) convertView.findViewById(R.id.txt_ha_town);
viewHolder.chk_hospitallist = (CheckBox) convertView.findViewById(R.id.chk_box_ha_list);
final View finalConvertView = convertView;
viewHolder.chk_hospitallist.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
CheckBox cb = (CheckBox) v;
viewHolder.rbt_primarylocation = (RadioButton) finalConvertView.findViewById(R.id.rbtn_pl);
HAM _state = (HAM) cb.getTag();
if(cb.isChecked())
{
_state.setSelected(cb.isChecked());
hospitalid.add(_state.getId().toString());
viewHolder.rbt_primarylocation.setVisibility(View.VISIBLE);
Toast.makeText(
v.getContext(),
"Clicked on If: " + _state.getId().toString() + " is "
+ cb.isChecked(), Toast.LENGTH_LONG).show();
}
else
{
_state.setSelected(false);
hospitalid.remove(_state.getId().toString());
viewHolder.rbt_primarylocation.setVisibility(View.INVISIBLE);
Toast.makeText(
v.getContext(),
"Clicked on Else: " + _state.getId().toString() + " is "
+ cb.isChecked(), Toast.LENGTH_LONG).show();
}
}
});
// Cache the viewHolder object inside the fresh view
convertView.setTag(viewHolder);
} else {
// View is being recycled, retrieve the viewHolder object from tag
viewHolder = (ViewHolder) convertView.getTag();
}
HAM state = selectedhospital.get(position);
viewHolder.name.setText(state.getName());
viewHolder.home.setText(state.getAddress1()+"\r\n"+ state.getCity()+", "+state.getState()+" "+state.getZip());
viewHolder.chk_hospitallist.setChecked(state.isSelected());
viewHolder.chk_hospitallist.setTag(state);
return convertView;
}
}
В этом коде я пытаюсь скрыть и показать RadioButton, когда флажок или unchecked.Same время Я также хочу добавить или удалить выбранное/невыбранное значение флажка из массива. Но когда я запускаю этот код, он работает неправильно. Когда я выбрал один флажок (с первого взгляда), вместо первого вида открывается видимый переключатель другого вида. Еще одна вещь, которую я также хочу выбрать только одну радиокнопку (когда я выбрал более 2 флажков).
Спасибо, он работает как шарм. – Jay
Привет @I_A_Mok, теперь я должен добавить выбранный элемент, выбранный при редактировании. Значит, как только я сохраню данные, он сохранит в sqlite. Когда я перехожу к этому действию и нажимаю «Изменить», я должен установить проверенные данные, которые хранятся в базе данных. – Jay
Попробуйте создать общедоступный метод внутри адаптера, передайте выбранный список элементов в адаптер и вызовите notifyDataSetChanged(). У меня есть блог о ListView: programandroidlistview.blogspot.com, это может помочь! –