希望有人可以提供帮助。我有一个列表视图,在每行显示各种textview,editviews和abutton。我使用了getView
public View getView(final int position, View convertView, ViewGroup parent)
{
View v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.catlistrow, null);
}
TextView pDesc = (TextView) v.findViewById(R.id.productlinerow);
TextView pPack = (TextView) v.findViewById(R.id.productlinerow3);
ImageView iThumbnail = (ImageView) v.findViewById(R.id.Thumbnail);
final Button bAdd = (Button)v.findViewById(R.id.SOCatLine);
final EditText pOrdQty = (EditText) v.findViewById(R.id.SOQty);
pDesc.setText(((HashMap<String,String>) getItem(position)).get("Column2"));
pPack.setText(((HashMap<String,String>) getItem(position)).get("Column3"));
pOrdQty.setText(((HashMap<String,String>) getItem(position)).get("OrdQty"));
String EanCode = ((HashMap<String,String>) getItem(position)).get("EANCode");
然后我在getView
中为添加按钮添加了一个OnClickListner bAdd.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
Object o = list.get(position);
HashMap<String, String> map2 = (HashMap<String, String>)o;
String b = map2.get("OrdQty");
String sProdCode = map2.get("ProdCode");
String ProdPrice = map2.get("ProdPrice");
b = pOrdQty.getText().toString();
int OrderQty = Integer.parseInt(b);
//Check to see if add is pressed and qty zero
if ( OrderQty == 0 )
{
OrderQty = 1;
b = "1";
}
db.open();
int iOrderNo = Integer.parseInt(OrderNo);
// update line
iLineNumber = iLineNumber + 1;
int QtyCheck = db.createCATorderline(iOrderNo, iLineNumber,
sProdCode, ProdPrice, b,"P");
bAdd.setText("Change");
//Close the database
db.close();
}
});
按钮文字在我点击的按钮上变化很好,这很棒。我遇到的问题是,如果我现在向下滚动,然后我看到屏幕上的其中一个按钮上的文字也发生了变化。
有人可以帮忙吗?
谢谢Neil
列表视图的XML
<ImageView
android:id="@+id/Thumbnail"
android:layout_width="190px"
android:layout_height="200px"
android:layout_alignParentLeft="true"
android:maxWidth="190px"
android:maxHeight="200px"
android:background="@null" />
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/productlinerow"
android:textColor="#000000"
android:layout_marginTop="10dip"
android:textSize="25dip"
android:layout_marginBottom="20dip"
android:layout_height="match_parent"
android:text="column1"
android:layout_width="400dip"
android:layout_toRightOf="@+id/Thumbnail"/>
<TextView android:id="@+id/productlinerow3"
android:textColor="#000000"
android:textSize="25dip"
android:text="column2"
android:layout_marginTop="10dip"
android:layout_height="match_parent"
android:layout_width="300dip"
android:layout_below="@+id/productlinerow"
android:layout_toRightOf="@+id/Thumbnail"/>
<TextView
android:id="@+id/qtylabel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/productlinerow"
android:layout_toLeftOf="@+id/SOQty"
android:layout_marginTop="40dip"
android:layout_marginRight="30dip"
android:inputType="number"
android:editable="true"
android:gravity="right"
android:text="Order Qty:"
android:textSize="25dip" />
<EditText
android:id="@+id/SOQty"
android:layout_width="100dip"
android:layout_height="60dip"
android:layout_marginTop="25dip"
android:layout_toLeftOf="@+id/SOCatLine"
android:layout_marginRight="30dip"
android:layout_below="@+id/productlinerow"
android:text="1"
android:maxLength="3"
android:inputType="number"
android:singleLine="true"
android:textSize="25dip"
android:imeOptions="flagNoExtractUi"
android:selectAllOnFocus="true"/>
<Button android:text="Add" android:background="@drawable/green_button"
android:id="@+id/SOCatLine"
android:textSize="25dip"
android:textColor="#FFFFFF"
android:layout_width="130dip"
android:layout_marginTop="30dip"
android:layout_height="wrap_content"
android:layout_below="@+id/productlinerow"
android:layout_alignParentRight="true"
/>
</RelativeLayout>
答案 0 :(得分:2)
您必须将按钮文本存储在某种集合中。正如你可以在这里使用HashMap,你可以再创建一个HashMap对象,它将使用
将Button的文本存储在getView()
中。
bAdd.setText(((HashMap<String,String>) getItem(position)).get("btn_text"));
然后您可以在setTag()
onClick()
使用该实例
bAdd.setTag((HashMap<String,String>) getItem(position));
然后在onClick()
内使用getTag()
来获取Button的位置。
@Override
public void onClick(View v) {
HashMap<String,String> map = (HashMap<String,String>)v.getTag();
map.put("btn_text", "Change");
((Button)v).setText(map.get("btn_text"));
}
答案 1 :(得分:0)
如何初始化你的bAdd按钮......没关系,我现在就看到了。
我会检查您的XML文件,您的两个按钮可能具有相同的ID。