基本アダプターを拡張するリストビューのカスタムアダプターを作成しました。list_item.xmlに別の行を追加するまでは正常に機能していたので、OnItemClickListnerでクリックすると、その下の行にアイテムの説明が表示されます隠されていました。アイテムをクリックすると、説明の下の行とリストの一番下にある別のアイテムが表示されることを除いて、それは正常に機能しますが、1つのアイテムのみを押して、アイテムの行を上下にスクロールすると、クリックしたものは消えますが、それ自体で開いたものは開いたままです。検索したところ、bindView を使用しておらず、List が 5 ~ 10 個のアイテムを取得して再利用していることが原因である可能性があることがわかりました。その場合、どうすれば bindViewew を customAdapter に実装できますか。ataached s my on click listener と getView of my customAdapter
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting values from selected ListItem
if ((((LinearLayout) view.findViewById(R.id.edit)).getVisibility()) == (View.VISIBLE))
{
((LinearLayout) view.findViewById(R.id.edit)).setVisibility(View.GONE);
}else
{
((LinearLayout) view.findViewById(R.id.edit)).setVisibility(View.VISIBLE);
((EditText) view.findViewById(R.id.itemn)).setFocusable(true);
new LoadCategories().execute();
}
2 番目の問題: 説明行には、項目を押したときに項目の下に表示される説明を示す editText があります。しかし、それを押して変更したり、表示されたときに編集したりすることはできません。
public View getView(final int position, View convertView, ViewGroup parent) {
System.out.println("getView " + position + " " + convertView);
final ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(l, null);
holder = new ViewHolder();
holder.id = (TextView)convertView.findViewById(R.id.id);
holder.name = (TextView)convertView.findViewById(R.id.name);
holder.price = (TextView)convertView.findViewById(R.id.price);
holder.description = (TextView)convertView.findViewById(R.id.description);
holder.button = (Button) convertView.findViewById(R.id.update);
holder.btn = (Button) convertView.findViewById(R.id.order);
holder.en = (EditText)convertView.findViewById(R.id.itemn);
holder.ep = (EditText)convertView.findViewById(R.id.pri);
holder.ed = (EditText)convertView.findViewById(R.id.descript);
convertView.setTag(holder);
}
else {
holder = (ViewHolder)convertView.getTag();
}
holder.id.setText(getId(getItem(position)));
holder.name.setText(getName(getItem(position)));
holder.price.setText("£ " + getPrice(getItem(position)));
holder.description.setText(getDesc(getItem(position)));
holder.btn.setVisibility(View.GONE);
holder.en.setText((holder.name.getText()).toString());
holder.ep.setText((holder.price.getText()).toString());
holder.ed.setText((holder.description.getText()).toString());
return convertView;
}
public void clear(){
itemsList.clear();
notifyDataSetChanged();
}
}
これが私のlist_item.xmlです。基本的に最初の tableRow は、hashMap の配列から渡されたすべての情報を示します。2列目は未使用です。3 番目の TableRow は最初の行から情報を取得し、それを editText に設定します。これは後で変更できるため、後で修正された情報でデータベースを更新するために使用されます。3 行目は非表示で、項目を押すと表示されます。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingBottom="5dp" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:baselineAligned="false" >
<TextView
android:id="@+id/id"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#FFFFFF"
android:visibility="gone" />
<TextView
android:id="@+id/quantity"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="0.5"
android:gravity="left"
android:textAllCaps="true"
android:textColor="#FFFFFF"
android:textSize="30sp"
android:textStyle="bold"
android:typeface="serif"
android:visibility="gone" />
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="left"
android:layout_weight="3"
android:gravity="left"
android:textAllCaps="true"
android:textColor="#FFFFFF"
android:textSize="30sp"
android:textStyle="bold"
android:typeface="serif" />
<TextView
android:id="@+id/price"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="right"
android:paddingRight="15dp"
android:textAllCaps="true"
android:textColor="#FFFFFF"
android:textSize="30sp"
android:textStyle="bold"
android:typeface="serif" />
<Button
android:id="@+id/order"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_weight="0"
android:focusable="false"
android:minHeight="0dp"
android:minWidth="50dp"
android:text="+"
android:textStyle="bold" />
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tableRow1"
android:gravity="center_horizontal" >
<TextView
android:id="@+id/description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAllCaps="true"
android:textColor="#FFFFFF"
android:textSize="20sp"
android:textStyle="bold"
android:typeface="serif"
android:visibility="gone" />
</TableRow>
<TableRow
android:id="@+id/TableRow01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="false"
android:layout_alignParentLeft="true"
android:layout_below="@id/tableRow2"
android:gravity="center_horizontal" >
<LinearLayout
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone" >
<EditText
android:id="@+id/itemn"
android:layout_width="match_parent"
android:layout_height="69dp"
android:ems="10"
android:focusable="false"
android:focusableInTouchMode="false"
android:gravity="top|left"
android:hint="NAME"
android:inputType="text"
android:textColor="#FFFFFF"
android:textSize="20sp" />
<EditText
android:id="@+id/descript"
android:layout_width="match_parent"
android:layout_height="82dp"
android:ems="10"
android:focusable="false"
android:focusableInTouchMode="false"
android:gravity="top|left"
android:hint="DESCRIPTION"
android:inputType="textMultiLine"
android:textColor="#FFFFFF"
android:textSize="20sp" />
<EditText
android:id="@+id/pri"
android:layout_width="match_parent"
android:layout_height="62dp"
android:ems="10"
android:focusable="false"
android:focusableInTouchMode="false"
android:gravity="top|left"
android:hint="£ PRICE"
android:textColor="#FFFFFF"
android:textSize="20sp" />
<Spinner
android:id="@+id/spinne"
style="@style/spinner_style"
android:layout_width="352dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@drawable/dropdown"
android:gravity="center"
android:overScrollMode="always"
android:prompt="@string/orders"
android:textAlignment="center"
android:textColor="#FFFFFF"
android:textSize="20sp" />
<Button
android:id="@+id/update"
android:layout_width="135dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="0.55"
android:focusable="false"
android:text="update"
android:textAllCaps="true" />
</LinearLayout>
</TableRow>
</RelativeLayout>