我为我的列表视图做了一个自定义适配器,它扩展了一个基本适配器,它工作正常,直到我在我的 list_item.xml 中添加了另一行,所以现在在我的 OnItemClickListner 中,点击应该在它下面的行中显示项目的描述被隐藏了。效果很好,除了当我单击任何项目时,它会在列表底部显示描述下的行和列表底部的另一个项目,尽管我只按下一个项目,当我再次向下和向上滚动时,项目的行 a点击消失,但另一个自己打开的保持打开状态。我搜索并发现这可能是因为我不使用 bindView 并且任何 List 从 5-10 个项目中获取然后重用它们。如果是这种情况,我该如何为我的 customAdapter 实现 bindVIew。附加了我的点击监听器和我的 customAdapter 的 getView
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();
}
第二个问题:我的描述行有一个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。Baically 第一个 tableRow 显示了从 hashMap 数组传递的所有信息。第二排还没用。第三个 TableRow 从第一行获取信息并将其设置为 editText,然后可以对其进行修改,以便之后使用更正的信息更新数据库。第三行被隐藏并在按下项目时显示。
<?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>