Android的 - 的EditText中的ListView - 键盘的意外行为 [英] Android - Unexpected Behavior of Keypad - EditText in ListView

查看:434
本文介绍了Android的 - 的EditText中的ListView - 键盘的意外行为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

由于过去两天即我已经创建的ListView 自定义视图与<$ C我坚持问题$ C>变异SubLayout 这样的:

I am stuck with problem since last two days i.e. i have created ListView with Custom View with Variant SubLayout like:

问题:

      
  • 当我点击的EditText ,其显示的软输入键盘,配有数字小键盘并立即集中丢失从
      的EditText与字母键盘的变化。 (第一下面的截图)
  •   
  • 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)

      
  • 的EditText 的第二次集中优良工程,并采取数值,但同时其滚动按键的变化,从数字到   字母。 (第二下面的截图)
  •   
  • 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)

其实我能理解的问题是什么,它​​是不断变化的   显示/隐藏键盘,因为这种观点是每次更新   时间,所以我能做些什么的继续专注于的EditText 或prevent到   刷新上显示/隐藏键盘查看。

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.

我的适配器code是:

My Adapter Code is:

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 Layout of Product select_product.xml:

<?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

Heading Row XML which is used in getView() 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>

这产品行SubLayouts从下面的文件创建。

SubLayouts of that Product Row is Creating from following files.

list_product_variant_single_row_view.xml

list_product_variant_single_row_view.xml

list_product_variant_multiple_row_view.xml

list_product_variant_multiple_row_view.xml

注意的:查看距离时的EditText清爽失去焦点   键盘是开放的。这就是为什么小键盘更改视图数字来   字母。我已经改变了的Andr​​oidManifest.xml 与   安卓windowSoftInputMode =stateAlwaysHidden和   安卓configChanges =keyboardHidden |定位,但不工作   对我来说。

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.

您的帮助,将AP preciated。

Your Help would be appreciated.

推荐答案

添加此行会在code:

Add this line on your code:

input.setRawInputType(Configuration.KEYBOARD_12KEY);

这将只显示数字键盘。 检查这个..

this will show only the numeric keyboard. check this..

这篇关于Android的 - 的EditText中的ListView - 键盘的意外行为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆