Android ListView с флажком и всеми интерактивными
Возможный дубликат:
Android: привязка данных из базы данных к CheckBox в ListView?
Я хочу использовать ListView с элементами, имеющими следующий макет
-------------------------
[CB] TV TV
-------------------------
CB - это флажок, а ТВ - текстовое окно.
Теперь я где-то читал, что вы не можете использовать элементы с кликабе в ListView. Если у вас есть, то вы не сможете нажать на ListItems.
Но если я посмотрю приложение GoogleMail, это возможно. Я могу отметить несколько сообщений с помощью флажка (и затем выбрать действие для них), или я могу нажать на ListItem (или прокрутить с помощью dpad), чтобы перейти на другой экран.
Кто-нибудь имеет код/пример, как это возможно?
Ответы
Ответ 1
Задайте CheckBox
как focusable="false"
в вашем XML-макете. В противном случае он украдет события щелчка из списка.
Конечно, если вы это сделаете, вам нужно вручную обработать маркировку CheckBox
как отмечено или не отмечено, если щелкнуть элемент списка вместо CheckBox
, но вы, вероятно, этого хотите.
Ответ 2
Установите для адаптера listview значение "simple_list_item_multiple_choice"
ArrayAdapter<String> adapter;
List<String> values; // put values in this
//Put in listview
adapter = new ArrayAdapter<UserProfile>(
this,
android.R.layout.simple_list_item_multiple_choice,
values);
setListAdapter(adapter);
Ответ 3
holder.checkbox.setTag(row_id);
и
holder.checkbox.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
CheckBox c = (CheckBox) v;
int row_id = (Integer) v.getTag();
checkboxes.put(row_id, c.isChecked());
}
});
Ответ 4
этот код работает на моем proyect, и я могу выбрать элемент списка и флажок
<?xml version="1.0" encoding="utf-8"?>
<!-- Single List Item Design -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true" >
<TextView
android:id="@+id/label"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4" />
<CheckBox
android:id="@+id/check"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:focusable="false"
android:text="" >
</CheckBox>
</LinearLayout>
Ответ 5
Ниже приведен код ниже:
public class DeckListAdapter extends BaseAdapter{
private LayoutInflater mInflater;
ArrayList<String> teams=new ArrayList<String>();
ArrayList<Integer> teamcolor=new ArrayList<Integer>();
public DeckListAdapter(Context context) {
// Cache the LayoutInflate to avoid asking for a new one each time.
mInflater = LayoutInflater.from(context);
teams.add("Upload");
teams.add("Download");
teams.add("Device Browser");
teams.add("FTP Browser");
teams.add("Options");
teamcolor.add(Color.WHITE);
teamcolor.add(Color.LTGRAY);
teamcolor.add(Color.WHITE);
teamcolor.add(Color.LTGRAY);
teamcolor.add(Color.WHITE);
}
public int getCount() {
return teams.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.decklist, null);
holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.deckarrow);
holder.text = (TextView) convertView.findViewById(R.id.textname);
.......here you can use holder.text.setonclicklistner(new View.onclick.
for each textview
System.out.println(holder.text.getText().toString());
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(teams.get(position));
if(position<teamcolor.size())
holder.text.setBackgroundColor(teamcolor.get(position));
holder.icon.setImageResource(R.drawable.arraocha);
return convertView;
}
class ViewHolder {
ImageView icon;
TextView text;
}
}
Надеюсь, что это поможет.