android - EditText 从 ListView 中的其他 EditText 窃取焦点

标签 android android-layout listview android-listview

我有一个独立的 EditText 和一个 ListView。 ListView 中的每个项目还有两个 EditText 字段。当我触摸 ListView EditText 内部时,独立的 EditText 抢走了焦点。这使得无法编辑任何 ListView EditText 字段。

<code>Name</code> steals the focus from the other <code>TextView</code> elements inside the <code>ListView</code>

NameListView 中的其他 TextView 元素窃取焦点

这是 Activity 的 XML,包含独立的 EditTextListView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_marginTop="16dip"
  android:orientation = "vertical" >

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_marginBottom="16dip" >

    <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginLeft="16dip"
      android:layout_weight="1"
      android:text="@string/name"
      android:textAppearance="?android:attr/textAppearanceMedium" />

    <EditText
      android:id="@+id/editblindschedule_name"
      android:layout_width="0dip"
      android:layout_height="wrap_content"
      android:layout_weight="5"
      android:ems="10"
      android:inputType="text" />

  </LinearLayout>

  <ListView
    android:id="@+id/listview_editblindschedule"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

</LinearLayout>

这里是 ListView 行 XML:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent" >

  <TextView 
    android:id="@+id/editblindschedule_round"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="2"/>

  <EditText
    android:id="@+id/editblindschedule_small"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="@string/small"
    android:ems="4"
    android:inputType="number"
    android:layout_weight="4"
    android:layout_marginRight="10dip"
    android:text="@string/integer_zero"
    android:gravity="center" />

  <EditText
    android:id="@+id/editblindschedule_big"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="@string/big"
    android:ems="4"
    android:inputType="number"
    android:layout_weight="4"
    android:layout_marginRight="10dip"
    android:paddingRight="6dip"
    android:text="@string/integer_zero"
    android:gravity="center" />

  <CheckBox
    android:id="@+id/editblindschedule_checkbox"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:checked="true" />

</LinearLayout>

这是Java代码

  @Override
  protected void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_edit_blind_schedule);

    ...

    adapter = new BlindAdapter(this, blindSchedule.getBlindLevels());
    listView = (ListView) findViewById(R.id.listview_editblindschedule);
    listView.setAdapter(adapter);

最后,适配器:

    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
    {
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

      View row = inflater.inflate(R.layout.listview_editblindschedule, parent, false);

      if (!creating) {  // Set default values.

        TextView round = (TextView) row.findViewById(R.id.editblindschedule_round);
        EditText small = (EditText) row.findViewById(R.id.editblindschedule_small);
        EditText big = (EditText) row.findViewById(R.id.editblindschedule_big);

        round.setText("" + (position + 1));
        small.setText("" + blindLevels.get(position).getSmallBlind());
        big.setText("" + blindLevels.get(position).getBigBlind());
      }

      return row;
    }

最佳答案

对我有用的解决方案是将 android:windowSoftInputMode="adjustPan"放在 list 的 Activity 中。这是我唯一需要的改变。

关于android - EditText 从 ListView 中的其他 EditText 窃取焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23974192/

相关文章:

java - 我如何使用改造和recyclerView解析json对象

android - 滚动时ListView背景变黑

android - 为什么我们在android xml文件中使用资源之前放置@?

android - 如何在 Material Bottom App Bar 中自定义 View ?

c# - ListView不会删除Xamarin.Forms中的项目。我已将ObservableCollection分配给ListView itemsource。 MVVM

WPF 在 Listview 中展开特定的扩展器

android - fragment 保留旧信息(未正确更新)

java - SWIG C 函数指针和 JAVA

android - 以编程方式更改 TextInputLayout 提示颜色

android - BaseAdapter 和 ArrayAdapter 有什么区别?