我有一个独立的EditText
和一个ListView
。 ListView中的每个项目还有两个EditText
字段。当我触摸ListView
EditText
时,独立的EditText
会抢断焦点。这样就无法编辑任何ListView
EditText
字段。
Name
窃取了TextView
ListView
元素的焦点
以下是活动的XML,其中包含独立的EditText
和ListView
<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;
}
答案 0 :(得分:2)
对我有用的解决方案是把android:windowSoftInputMode =&#34; adjustPan&#34;在清单中的活动中。这是我唯一需要做的改变。
答案 1 :(得分:0)
我不喜欢它但是在挖掘ListView
代码之后我最终通过覆盖getFocusedChild()
方法并返回null,因为所有其他标志组合的试验都没有达到令人满意的解决方案。
即使android:windowSoftInputMode="adjustPan"
调整平移导致我的布局中出现过多的文物。
小心覆盖该方法可能会导致其他不需要的行为,所以在你支持的所有Android版本中使用它并进行全面测试,可能会调用super而不是为没有/将会的android版本返回null有这个问题。