編集
解決済み
Adapter クラスの addTextChangeLister を削除すると、editext がフォーカスされ、値を編集できるようになりますがaddTextChangeListener
、ユーザーが入力したときに見積価格の値を計算するために追加するにはどうすればよいですか。
リスト項目には 2 つEditext
(数量と価格) と 1 つTextView
(見積もり価格) があります。ユーザーが価格と数量を入力できるようにすると、ユーザーが2つの値(数量または価格Edittext
)のいずれかを変更すると、見積価格が計算されます。これがスクリーンショットです
しかし、内部の EditextListview
はフォーカスを取得せず、編集させないでください。コードは次のとおりです...
これはリストビュー xml です
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<EditText
android:id="@+id/ep_multiselect"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:completionThreshold="3"
android:hint="Enter Product Name"
android:textSize="16sp" />
<Button
android:id="@+id/ep_go"
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/ep_multiselect"
android:text=" Go " />
<ListView
android:id="@+id/ep_listview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/ep_go"
android:focusable="false"
android:visibility="gone" >
</ListView>
</RelativeLayout>
ここにlistitemsコードがあります...
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/ep_productName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="3dip"
android:layout_toLeftOf="@+id/ep_checkBox"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/ep_qty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/ep_productName"
android:layout_toLeftOf="@+id/ep_price"
android:ems="10"
android:focusable="true"
android:hint="Qty"
android:inputType="number" >
</EditText>
<EditText
android:id="@+id/ep_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/ep_qty"
android:layout_alignBottom="@+id/ep_qty"
android:layout_alignParentRight="true"
android:ems="10"
android:focusable="true"
android:hint="Price"
android:inputType="number" />
<TextView
android:id="@+id/ep_quotePrice"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/ep_qty"
android:text="Quote Price"
android:textSize="16sp" />
</RelativeLayout>
そして、これが私がJavaでそれを処理する方法です..
private class MyEditProductAdapter extends BaseAdapter {
private LayoutInflater inflater;
private ArrayList<ProductDetailBean> productDetails;
private boolean listType;
public MyEditProductAdapter(LayoutInflater arg1,
ArrayList<ProductDetailBean > productDetails,
boolean listType) {
this.inflater = arg1;
this.productDetails = productDetails;
this.listType = listType;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return productQuantity.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return productQuantity;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(final int position, View convertView, ViewGroup arg2) {
final Holder holder;
if (convertView == null) {
holder = new Holder();
// inflate the view from xml
convertView = inflater.inflate(R.layout.edit_product_listitems,
null);
holder.productName = (TextView) convertView
.findViewById(R.id.ep_productName);
holder.qty = (EditText) convertView.findViewById(R.id.ep_qty);
holder.quotePrice = (TextView) convertView
.findViewById(R.id.ep_quotePrice);
holder.price = (EditText) convertView
.findViewById(R.id.ep_price);
holder.box = (CheckBox) convertView
.findViewById(R.id.ep_checkBox);
holder.qty.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
if (arg0.length() > 0) {
holder.quotePrice.setText("Quote Price : "
+ Integer.parseInt(arg0.toString())
* productPrice.get(position));
notifyDataSetChanged();
}
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
holder.price.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
if (arg0.length() > 0) {
holder.quotePrice.setText("Quote Price : "
+ Integer.parseInt(arg0.toString())
* productQuantity.get(position));
notifyDataSetChanged();
}
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
final int localproductPrice = this.productPrice.get(position);
final int localqty = this.productQuantity.get(position);
holder.productName.setText(this.productName.get(position));
holder.qty.setText("" + localqty);
holder.price.setText("" + localproductPrice);
holder.quotePrice.setText("Quote Price : "
+ (localqty * localproductPrice));
return convertView;
}
}
static class Holder {
TextView productName, quotePrice;
CheckBox box;
EditText qty, price;
}