为什么在android studio项目中键盘会改变,编辑文本框会失去焦点?

为什么在android studio项目中键盘会改变,编辑文本框会失去焦点?,android,xml,android-softkeyboard,Android,Xml,Android Softkeyboard,好的,第一次海报。我在高中教书,第一年的工作没有导师的帮助,所以如果我的代码是垃圾,温柔一点 问题:此程序用于保存正在出售的馅饼的库存。在XML中,我有一个线性布局,listview,最后是一个线性布局。listview通过一个自定义适配器显示当前的弹出列表,并有一个编辑文本来更新计数。最后一个线性布局具有编辑文本,可向arraylist添加新的PoStart。添加此代码后,每当我在listview中选择编辑文本(我强制将其作为输入类型:“数字”)时,数字键盘就会弹出,然后消失,被普通的qwer

好的,第一次海报。我在高中教书,第一年的工作没有导师的帮助,所以如果我的代码是垃圾,温柔一点

问题:此程序用于保存正在出售的馅饼的库存。在XML中,我有一个线性布局,listview,最后是一个线性布局。listview通过一个自定义适配器显示当前的弹出列表,并有一个编辑文本来更新计数。最后一个线性布局具有编辑文本,可向arraylist添加新的PoStart。添加此代码后,每当我在listview中选择编辑文本(我强制将其作为输入类型:“数字”)时,数字键盘就会弹出,然后消失,被普通的qwerty键盘替换,编辑文本框会失去焦点。如果我快速点击编辑文本框3-4次,它将保持数字键盘向上并保持焦点。我就是不明白为什么焦点和键盘都在改变

<LinearLayout
    ...
<TextView
   ...
<TextView
    ...
<TextView
   ...
<TextView
   ...
<TextView
    ...
</LinearLayout>

<ListView
    android:layout_below="@+id/flavor"

    android:id="@+id/simpleListView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:divider="#000"
    android:dividerHeight="2dp"
    android:layout_weight="1"
    android:layout_gravity="top" />
<LinearLayout
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="0dp"
    android:layout_weight="1">
    <EditText
        android:id="@+id/newFlavor"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:hint="Flavor"
        android:textSize="10pt"
         />
    <CheckBox
        android:id="@+id/isSeasonal"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:checked="false"
         />
    <EditText
        android:id="@+id/newCurrent"
        android:layout_width="0dp"
        android:maxLength="3"
        android:layout_height="wrap_content"
        android:hint="Current"
        android:textSize="10pt"
         />
    <EditText
        android:id="@+id/newMax"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:maxLength="3"
        android:hint="Max"
        android:textSize="10pt"
         />
    <Button
        android:id="@+id/addNewFlavor"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:textSize="10pt"
        android:text="Add"
        android:layout_weight="1" />

</LinearLayout>

我认为您的
列表视图\u inventory.xml应该如下所示,只是在您的
编辑文本中添加了
android:inputType=“number”

...
<EditText
    android:id="@+id/edit_text"
    android:maxLength="3"
    android:paddingLeft="25dp"
    android:layout_width="75dp"
    android:inputType="number"
    android:layout_height="wrap_content"
    android:paddingRight="30dp"
    android:layout_weight="1" >
    <requestFocus />
    </EditText>
 ...
您甚至可以在适配器的
getView()
方法中删除将输入类型设置为EditText的代码

引用Android文档

每当ListView需要显示特定的数据行时,它都会请求关联的适配器通过getView()方法提供与该位置的数据对应的视图。每当需要在屏幕上更新视图时(例如,在创建/滚动等过程中),就会出现这种情况

因此,每当调用
getView()
时,都会指定
inputType=“number”
,然后返回到默认的inputType和popsup qwerty键盘

我想这会解决你的问题

编辑 所以你可以使用下面的

android:focusableInTouchMode="true"

为了得到想要的结果,删除Android 7中以前的

,我没有看到这个问题,但我最近在旧版本的Android上也遇到了这个问题
我通过添加以下三个解决了这个问题

1:在列表视图上设置android:DegenantFocusability=“AfterDegenders”。

在子代之后关注子代
在API级别1中添加
int FOCUS\u在子代之后
此视图只有在其后代都不需要时才会获得焦点

2:将以下内容添加到编辑文本中
android:focusable=“true”
android:focusableInTouchMode=“true”

3:将android:WindowsOfInputMode=“adjustResize”添加到清单文件的活动中。所以,即使出现键盘,您的列表也可以滚动


PS:如果有人面临同样的问题,我希望这能对他们有所帮助。

为什么强制输入类型,你可以用xml编写,android:inputType=“number”所以我先尝试了这个解决方案,然后尝试在适配器中强制输入。我回去取出XML中的所有输入要求。我现在遇到的问题是,当我在listview中选择EditText时,它会再次失去焦点,直到第二次选择时,它才会保持焦点。所以我认为这不是一个输入问题,而是一个焦点问题。更新答案,尝试实现它。这很有效。我不希望编辑文本具有焦点,除非触摸,否则会导致在创建时自动选择编辑文本,这是不需要的。此外,即使使用inputType=“number”,仍然会出现错误的键盘。数字键盘弹出,然后立即消失#我确实删除了我的问题。我在安卓6.0.1中遇到了这个问题。更改后第一行的第一个文本视图仍有问题。
...
<EditText
    android:id="@+id/edit_text"
    android:maxLength="3"
    android:paddingLeft="25dp"
    android:layout_width="75dp"
    android:inputType="number"
    android:layout_height="wrap_content"
    android:paddingRight="30dp"
    android:layout_weight="1" >
    <requestFocus />
    </EditText>
 ...
edittext.requestFocus();
android:focusableInTouchMode="true"