gpt4 book ai didi

Android - 键盘的意外行为 - ListView 中的 EditText

转载 作者:行者123 更新时间:2023-12-02 17:54:52 25 4
gpt4 key购买 nike

自过去两天以来,我一直遇到问题,即我使用 Custom ViewVariant SubLayout 创建了 ListView,如下所示:

Product View

问题:

  • When i click on EditText of Qty, its displaying Soft Input Keyboard with Numeric Keypad and immediately focus lost from
    edittext with change of alphabetic keypad. (First ScreenShot Below)

enter image description here

  • on Second time focus of EditText its works fine and taking numeric values but while scrolling its change keypad from numeric to alphabetic. (Second ScreenShot Below)

enter image description here

Actually i can understand problem is what that It is changing on showing/hiding keyboard and because of that view is updating every time so what can i do for keep focusing on EditText or prevent to Refresh Views on Show/Hide Keyboard.

我的适配器代码是:

class MyGridViewAdapter extends BaseAdapter {

private ArrayList<ProductItems> productItemList;
private LayoutInflater inflater = null;

ViewHolder holder;

double productQtyValue;
double productRateValue;
double productDiscountValue;
double productOfferDiscValue;
double productDiscountedRateValue;

double amount;

public MyGridViewAdapter(ArrayList<ProductItems> productItemsList) {
// TODO Auto-generated constructor stub
this.productItemList = productItemsList;
inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return productItemList.size();
}

@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return productItemList.get(position);
}

@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub

if (convertView == null) {

if(isViewWithCatalog)
convertView = inflater.inflate(R.layout.list_product_view_catalog, null);
else
convertView = inflater.inflate(R.layout.list_product_view, null);

holder = new ViewHolder();

holder.prodIsNewView = (ImageView) convertView.findViewById(R.id.productIsNewImageView);
holder.prodImageView = (ImageView) convertView.findViewById(R.id.productImage);
holder.prodNameView = (TextView) convertView.findViewById(R.id.productNameTextView);
holder.prodStockView = (TextView) convertView.findViewById(R.id.productStockTextView);
holder.prodQtyView = (EditText) convertView.findViewById(R.id.productQuantityValue);

holder.prodRateView = (TextView) convertView.findViewById(R.id.productRateValue);
holder.prodDiscView = (TextView) convertView.findViewById(R.id.productDiscountValue);
holder.prodOfferDiscView= (TextView) convertView.findViewById(R.id.productOfferDiscountTextViewValue);

holder.prodOriginalRateView = (TextView) convertView.findViewById(R.id.productOriginalRateValue);
holder.prodPackingQtyView = (TextView) convertView.findViewById(R.id.productBundleQtyView);

//TextView for Amount
holder.prodAmountView = (TextView) convertView.findViewById(R.id.productAmountValue);
holder.prodPriceTagView = (TextView) convertView.findViewById(R.id.productPriceTagTitle);
holder.layoutDiscountView = (LinearLayout) convertView.findViewById(R.id.productViewMiddle);

holder.priceLayoutView1 = (LinearLayout) convertView.findViewById(R.id.productEditTextViewAbove);
holder.priceLayoutView2 = (LinearLayout) convertView.findViewById(R.id.productViewMiddle);

holder.prodQtyView.addTextChangedListener(new GeneralTextWatcher(holder));

convertView.setTag(holder);

} else {
holder = (ViewHolder) convertView.getTag();
}

final ProductItems currentProductItem = productItemList.get(position);

holder.prodId = currentProductItem.getProdId();
holder.prodImagePath = currentProductItem.getProdImagePath();
holder.prodDesc = currentProductItem.getProdDesc();
holder.prodStock = currentProductItem.getProdStock();
holder.prodLowStock = currentProductItem.getProdLowStock();
holder.prodStockDate = currentProductItem.getProdStockDate();
holder.prodPackingQty = currentProductItem.getProdPackingQty();
holder.prodIsNew = currentProductItem.getProdIsNew();
holder.prodRate = currentProductItem.getProdRate();
holder.prodDisc = currentProductItem.getProdDisc();
holder.prodOfferDisc = currentProductItem.getProdOfferDisc();

holder.prodIsNewView.setVisibility(holder.prodIsNew == 1 ? View.VISIBLE : View.GONE);

String medium_path = holder.prodImagePath.isEmpty() ? "" : holder.prodImagePath.replace("product_image/", "product_image/medium/");
aq.id(holder.prodImageView).image(medium_path, true, true, 0, R.drawable.no_image, BitmapFactory.decodeResource(getResources(), R.drawable.no_image), AQuery.FADE_IN);

holder.prodImageView.setTag(holder);
holder.prodImageView.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(SelectProductActivity.this, FullScreenImagePreviewActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("position", position);
intent.putExtra("items", productItemList);
startActivity(intent);
}
});

/**
* CHECH WHETHER STOCK IS LESS THAN LOW_STOCK
*/
if(holder.prodStock <= holder.prodLowStock && isParentNull)
{
/** Product Stock for changing with 'k' format if it is greater than 10000 */
if(holder.prodLowStock > 999999)
holder.prodStockView.setText(String.valueOf(holder.prodStock).substring(0,3)+"k+");
else if(holder.prodStock > 99999)
holder.prodStockView.setText(String.valueOf(holder.prodStock).substring(0,2)+"k+");
else
holder.prodStockView.setText(""+holder.prodStock);

/**
* Changing BGCOLOR
* if stock is less than 0 => red background
* else => green background
*/
holder.prodStockView.setBackgroundResource(holder.prodLowStock <= 0 ? R.drawable.round_corner_red : R.drawable.round_corner_green);
holder.prodStockView.setVisibility(View.VISIBLE);
} else {
holder.prodStockView.setVisibility(View.GONE);
}

String code = currentProductItem.getProdCode();
code = (code.isEmpty() || code.equals("null")) ? "" : "["+code+"] ";
holder.prodNameView.setText(code + "" +currentProductItem.getProdName());

Log.w(TAG, "PACKING QTY : "+ holder.prodPackingQty);
if(holder.prodPackingQty > 0) { //&& isParentNull) {
holder.prodPackingQtyView.setText("Packing Qty: "+holder.prodPackingQty);
holder.prodPackingQtyView.setVisibility(View.VISIBLE);
}
else
holder.prodPackingQtyView.setVisibility(View.INVISIBLE);

holder.prodQtyView.setOnFocusChangeListener(new OnFocusChangeListener() {

@Override
public void onFocusChange(View v, boolean hasFocus) {
// TODO Auto-generated method stub
if (!hasFocus) {
ViewHolder viewHolder = (ViewHolder) v.getTag();
saveData(viewHolder);
}
}
});

holder.prodQtyView.setTag(holder);
holder.prodRateView.setTag(holder);
holder.prodDiscView.setTag(holder);
holder.prodOfferDiscView.setTag(holder);

productQtyValue = 0.0;
productRateValue = currentProductItem.getProdRate();
productDiscountValue = currentProductItem.getProdDisc();
productOfferDiscValue = currentProductItem.getProdOfferDisc();

holder.prodRateView.setText(""+new BigDecimal((productRateValue - (productRateValue * (productDiscountValue + productOfferDiscValue) / 100))).setScale(2, RoundingMode.DOWN));

/** First check whether value of Saved product Array is > 0 or not..*/
ProductItems savedProdTemp = prodItemsSavedList.get(holder.prodId, null);

if(savedProdTemp != null)
{
productQtyValue = savedProdTemp.getProdQty();
holder.prodQtyView.setText(""+productQtyValue);
} else {
holder.prodQtyView.setText("");
}

amount = (productQtyValue * productRateValue) - ((productQtyValue * productRateValue) * ((productDiscountValue + productOfferDiscValue) / 100));

if(productQtyValue > holder.prodStock && isParentNull) {
holder.prodQtyView.setTextColor(Color.RED);
holder.prodQtyView.setBackgroundResource(R.drawable.edittextred_edit_text_holo_light);
}
else {
holder.prodQtyView.setTextColor(Color.BLACK);
holder.prodQtyView.setBackgroundResource(R.drawable.myactionbar_edit_text_holo_dark);
}

holder.prodAmountView.setText("Rs." + new BigDecimal(amount).setScale(2, RoundingMode.CEILING));

return convertView;
}

public class ViewHolder {
int prodId;
String prodImagePath;
String prodDesc;
double prodRate;
double prodDisc;
double prodOfferDisc;
double prodStock;
double prodLowStock;
String prodStockDate;
double prodPackingQty;
int prodIsNew;

ImageView prodIsNewView;
ImageView prodImageView;
TextView prodNameView;
TextView prodStockView;
EditText prodQtyView;
TextView prodRateView;
TextView prodDiscView;
TextView prodOfferDiscView;

TextView prodOriginalRateView;
TextView prodAmountView;
TextView prodPackingQtyView;
TextView prodPriceTagView;

LinearLayout layoutDiscountView;

LinearLayout priceLayoutView1;
LinearLayout priceLayoutView2;
}
}

产品select_product.xml的 Activity 布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/productParentView"
android:layout_width="fill_parent"
android:layout_height="match_parent" >

<Spinner
android:id="@+id/categorySpinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:prompt="@string/prompt_select_category" />

<ListView
android:id="@+id/productList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/categorySpinner"
android:layout_margin="5dp"
android:descendantFocusability="afterDescendants"
android:focusable="false"
android:layout_marginBottom="10dp"
android:fastScrollEnabled="true" >
</ListView>

<TextView
android:id="@+id/productIfNoAvailable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:gravity="center"
android:text="@string/error_no_products_available_for_this_category"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@android:color/holo_red_dark"
android:visibility="gone" />

</RelativeLayout>

getView() 中使用的标题行 XML list_product_variant_heading_view.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/productVariantHeadingRelativeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:background="@drawable/bg_white_shadow"
android:gravity="center_horizontal"
android:padding="3dp" >

<RelativeLayout
android:id="@+id/layoutProductNameStock"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:gravity="center_horizontal"
android:orientation="horizontal" >

<RelativeLayout
android:id="@+id/productNameLayoutInnerForClick"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_toLeftOf="@+id/productIsNewImageView"
android:orientation="horizontal" >

<TextView
android:id="@+id/productNameTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/product_name"
android:textColor="@android:color/black"
android:textSize="@dimen/product_name_text_size" />
</RelativeLayout>

<ImageView
android:id="@+id/productIsNewImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginLeft="5dp"
android:contentDescription="@string/app_name"
android:src="@drawable/new_icon" />
</RelativeLayout>

<LinearLayout
android:id="@+id/productRowViewLinearLayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/layoutProductNameStock"
android:orientation="vertical" >
</LinearLayout>

</RelativeLayout>

该产品行的子布局是从以下文件创建的。

<强> list_product_variant_single_row_view.xml

<强> list_product_variant_multiple_row_view.xml

Noticed: View is refreshing and losing focus from edittext when keypad is open. that's why keypad is changing view from numeric to alphabetic. I have changed AndroidManifest.xml with android:windowSoftInputMode="stateAlwaysHidden" and android:configChanges="keyboardHidden|orientation" but not working for me.

我们将不胜感激您的帮助。

最佳答案

这是由于listview的回收机制造成的。这个问题已经在 google android 小组中提出了。最好在结帐时放置数量项目,或通过在下拉列表中提供数字来将编辑文本更改为下拉列表。

Issues focusing EditTexts in a ListView (Android)

https://code.google.com/p/android/issues/detail?id=31165

编辑它与此选项完美配合:

android:windowSoftInputMode="stateAlwaysHidden|adjustPan"

关于Android - 键盘的意外行为 - ListView 中的 EditText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30122027/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com