title: Android - Unexpected Behavior of Keypad - EditText in ListView
body: <p>I am stuck with problem since last two days i.e. i have created <code>ListView</code> with <code>Custom View</code> with <code>Variant SubLayout</code> like:</p>
  
  <p><img src="https://i.stack.imgur.com/e8jEz.png" alt="Product View"></p>
  
  <p>Problems:</p>
  
  <blockquote>
    <ul>
    <li>When i click on <code>EditText</code> of <strong>Qty</strong>, its displaying <strong>Soft Input    Keyboard with Numeric Keypad</strong> and immediately focus lost from<br>
    edittext with change of alphabetic keypad. (First ScreenShot Below)</li>
    </ul>
  </blockquote>
  
  <p><img src="https://i.stack.imgur.com/ClEId.png" alt="enter image description here"></p>
  
  <blockquote>
    <ul>
    <li>on Second time focus of <code>EditText</code> its works fine and taking numeric values but while scrolling its change keypad from numeric to
    alphabetic. (Second ScreenShot Below)</li>
    </ul>
  </blockquote>
  
  <p><img src="https://i.stack.imgur.com/QNFUh.png" alt="enter image description here"></p>
  
  <blockquote>
    <p>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 <code>EditText</code> or prevent to
    Refresh Views on Show/Hide Keyboard.</p>
  </blockquote>
  
  <p>My Adapter Code is:</p>
  
  <pre><code>class MyGridViewAdapter extends BaseAdapter {
  
      private ArrayList&lt;ProductItems&gt; productItemList;
      private LayoutInflater inflater = null;
  
      ViewHolder holder;
  
      double productQtyValue;
      double productRateValue;
      double productDiscountValue;
      double productOfferDiscValue;
      double productDiscountedRateValue;
  
      double amount;
  
      public MyGridViewAdapter(ArrayList&lt;ProductItems&gt; 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 &lt;= holder.prodLowStock &amp;&amp; isParentNull)
          {
              /** Product Stock for changing with 'k' format if it is greater than 10000 */
              if(holder.prodLowStock &gt; 999999)
                  holder.prodStockView.setText(String.valueOf(holder.prodStock).substring(0,3)+"k+");
              else if(holder.prodStock &gt; 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 =&gt; red background 
               * else =&gt; green background
               */
              holder.prodStockView.setBackgroundResource(holder.prodLowStock &lt;= 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 &gt; 0) { //&amp;&amp; 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 &gt; 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 &gt; holder.prodStock &amp;&amp; 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;      
      }
  }
  </code></pre>
  
  <p><strong>Activity Layout of Product <code>select_product.xml</code></strong>:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;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" &gt;
  
      &lt;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" /&gt;
  
      &lt;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" &gt;
      &lt;/ListView&gt;
  
      &lt;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" /&gt;
  
  &lt;/RelativeLayout&gt;
  </code></pre>
  
  <p><strong>Heading Row XML which is used in getView() <code>list_product_variant_heading_view.xml</code></strong></p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;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" &gt;
  
      &lt;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" &gt;
  
          &lt;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" &gt;
  
              &lt;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" /&gt;
          &lt;/RelativeLayout&gt;
  
          &lt;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" /&gt;
      &lt;/RelativeLayout&gt;
  
      &lt;LinearLayout
          android:id="@+id/productRowViewLinearLayout"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:layout_below="@+id/layoutProductNameStock"
          android:orientation="vertical" &gt;
      &lt;/LinearLayout&gt;
  
  &lt;/RelativeLayout&gt;
  </code></pre>
  
  <p>SubLayouts of that Product Row is Creating from following files.</p>
  
  <p><strong><a href="http://pastebin.com/3ic89jxr" rel="nofollow noreferrer">list_product_variant_single_row_view.xml</a></strong></p>
  
  <p><strong><a href="http://www.codeshare.io/qRysG" rel="nofollow noreferrer">list_product_variant_multiple_row_view.xml</a></strong></p>
  
  <blockquote>
    <p><strong>Noticed:</strong> View is refreshing and losing focus from edittext when
    keypad is open. that's why keypad is changing view from <code>numeric</code> to
    <code>alphabetic</code>. I have changed <code>AndroidManifest.xml</code> with 
    <code>android:windowSoftInputMode="stateAlwaysHidden"</code> and 
    <code>android:configChanges="keyboardHidden|orientation"</code> but not working
    for me.</p>
  </blockquote>
  
  <p>Your Help would be appreciated. </p>