Когда я нажимаю флажок внутри ListView, также проверяется второй элемент в списке. В качестве примера, если я проверю 1-й элемент, 7-й список будет проверен. Вот мой код для размещения ячейки:CheckBox внутри ListView внутри спискаFragment
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:id="@+id/relativeLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/imgDisclosureIndicator"
android:src="@drawable/disclosureon"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:paddingRight="6dp"></ImageView>
<ImageView
android:id="@+id/imgTaskState"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/taskok" />
<CheckBox
android:id="@+id/chkTaskImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/imgTaskState"
android:layout_toLeftOf="@+id/imgDisclosureIndicator"
android:layout_toRightOf="@+id/imgTaskState"
android:focusable="false" />
</RelativeLayout>
Я присоединился образом, чтобы помочь вам:
В качестве примечания, то ListView находится внутри ListFragment.
EDIT: Ниже приведен код, который отображает мою ячейку с ее данными.
String[] from = {"taskId", "taskStateId", "taskText", "disclosureIndicatorId"};
int[] to = {0, R.id.imgTaskState, R.id.chkTaskImage, R.id.imgDisclosureIndicator};
SimpleAdapter adapter = new SimpleAdapter(mContext, mList, R.layout.task_cell, from, to);
setListAdapter(adapter);
EDIT # 2: Эта ситуация не происходит, если ListView отображается вертикально.
EDIT # 3: Даже если я использую SimpleAdapter, с помощью следующего кода, когда ListView горизонтальна я получаю ту же ошибку.
private class CellInspectionAdapter extends BaseAdapter
{
private Vector<InspectionCell> cells;
private Context context;
public CellInspectionAdapter(Context context, Vector<InspectionCell> cells)
{
this.cells = cells;
this.context = context;
}
@Override
public int getCount()
{
return this.cells.size();
}
@Override
public Object getItem(int position)
{
return null;
}
@Override
public long getItemId(int position)
{
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
// Map data from the ArrayList from the adapter
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View celluleTask;
if (convertView == null)
{
celluleTask = new View(context);
celluleTask = inflater.inflate(R.layout.laprise_task_cell, null);
// Assign data to the cell
ImageView imgEtat = (ImageView)celluleTask.findViewById(R.id.imgTaskState);
imgEtat.setImageResource(cells.get(position).getStateDrawable());
// Assign text
CheckBox chkCell = (CheckBox)celluleTask.findViewById(R.id.chkTaskImage);
chkCell.setText(cells.get(position).getTexte());
// Disclosure
ImageView imgDisclosure = (ImageView)celluleTask.findViewById(R.id.imgDisclosureIndicator);
imgDisclosure.setImageResource(cells.get(position).getDisclosureDrawable());
}
else
{
celluleTask = (View)convertView;
}
return celluleTask;
}
}
EDIT # 5: Вот решение! Переопределите методы getViewTypeCount() и getItemViewType (int position). Я добавил эти строки в SimpleAdapter, и он работает.
@Override
public int getViewTypeCount() {
return getCount();
}
@Override
public int getItemViewType(int position) {
return position;
}
В чем заключен ваш код? Можете ли вы опубликовать методы getView() и onItemClick()? – znat
Я еще не запускаю метод OnItemClick. –
Я чувствую, что SimpleAdapter испортился с просмотром видов в вашем ListView. Это объясняет, почему это работает в портрете, а не в пейзаже. Попробуйте определить свой собственный адаптер (простой способ расширить ArrayAdapter) –
znat