- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
自过去两天以来,我一直遇到问题,即我使用 Custom View
和 Variant SubLayout
创建了 ListView
,如下所示:
问题:
- 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)
- 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)
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
toalphabetic
. I have changedAndroidManifest.xml
withandroid:windowSoftInputMode="stateAlwaysHidden"
andandroid: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/
我遇到了一个问题。我正在使用 pyinstaller 将代码导出到 .exe。代码包括 tkinter、PIL 和 keyboard 模块。软件在我使用 Python 的 PC 上运行完美,而在没有
我正在尝试将 STM32F0-disco 用作 Windows PC 的键盘。正在打印的字符有问题。 下面的代码等到板载按钮被按下,然后应该打印一次这三个字符。 /* USER CODE BE
我想在单击键盘上的“完成”按钮时退出键盘。我怎样才能做到这一点?我有以下代码=> textView.returnKeyType = UIReturnKeyDone; 我有这个代码用于限制 TextVi
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我想调出一个用于输入电话号码的键盘。有没有办法在我自己的 Activity 中显示此对话框并捕获用户输入的内容。我需要能够控制用户点击调用时发生的情况。所以我很感兴趣自定义允许用户输入电话号码的 Ac
我希望软键盘位于我的布局之上,而不是在它弹出时四处移动我的布局。我该怎么做呢?我查看了 list ,但从未设置 android:windowSoftInputMode="adjustResize" 此
主题:将某些键替换为另一个键值。 例如如果我按 P,它应该是 F24。 当我尝试从 .ini 文件加载键值时, Hook 不再是全局的。它仅在 winapi 窗体处于焦点时才有效。 我的 DLL 代码
当我点击 EditText 时,是否可以用小写字母启动 android 键盘?基本上,我想要的是将 EditText 中的第一个字母小写,但也让用户可以根据需要将其变为大写...... (EditTe
我想监控 IOS 上的键盘隐藏按钮并触发一个事件。我在说: 我只想在用户按下实际按钮时进行监控。我不想要键盘隐藏时的事件。 最佳答案 用户键盘通知观察者.. 对于 swift NSNotificati
在经历了这一切之后就像认真的...... Easy way to dismiss keyboard? ...我有多个 TextFields 和一些 TextViews。有没有办法对所有文本字段进行批处
所以我想在我的应用程序中添加一个键盘,其中包含表情符号,就像 Whatsapp 或环聊一样。我怎样才能做到这一点?我想保留我的键盘,因为我只想添加标签来放置表情符号。我认为软键盘很容易支持它,但到目前
首先,我会让您知道,我在 StackOverflow 以及 Google 和 Github 上查看了很多很多不同的帖子。我已经到处寻找对我有帮助的任何。但是,似乎没有任何效果。它要么已经过时(超过 1
当按下相应的键时,我试图让我的游戏中的宇宙飞船 (PlayerShip.gif) 向左、向右、向上和向下移动。我知道我需要一个 keyboardListener 但我在弄清楚它的去向以及它是如何实际实
我正在尝试制作一个 HID USB 设备。我搜索了一下,发现键盘的输出有 8 个字节。第一个字节是修饰符,第二个字节是保留字节,其余 6 个字节是关键代码。我认为在某些情况下,例如“prtsc”,需要
我最近开始学习 Vim,在深入学习之前,我有一个问题需要回答。 使用 AZERTY 键盘,我是否应该重新映射命令和快捷方式的键以适应 QWERTY 键盘的键位置? 我之所以问这个,是因为显然在创建这些
我一直认为在使用 Dvorak 布局之前,我需要购买 Dvorak 键盘。但是我在亚马逊上找不到。仅仅是从 Qwerty 键盘上弹出键并移动它们吗? 最佳答案 为了帮助您了解键盘布局,您可以重新排列
我不敢相信我还没有找到任何关于此的文档,但我想知道如何命令键盘激活并接收来自它的输入。我可以找到在编辑文本字段时操作弹出键盘的所有示例。谢谢 最佳答案 您还可以使用 UIKeyInput 协议(pro
我有一个 UITextField,其中弹出的键盘已禁用其 Shift 键。键盘类型设置为 UIKeyboardTypeNamePhonePad,看起来应该允许大写。 如果我将键盘类型更改为“默认”但保
背景:我的表单有一个 TWebBrowser。我想用 ESC 关闭表单,但 TWebBrowser 吃掉了击键 - 所以我决定使用键盘 Hook 。 问题是表单可以同时在多个实例中打开。 无论我做什么
我需要(即客户要求)提供自定义键盘,供用户在文本字段和区域中输入文本。我已经有一些可以执行键盘操作并将测试附加到文本字段的东西,但是我想让它更通用并让它像标准的 iphone 键盘一样工作,即当用户选
我是一名优秀的程序员,十分优秀!