2014-09-05 56 views
0

我有一个CheckBox可启用/禁用一对EditText视图。首先,当活动开始时,我可以点击EditText,但是当我按下CheckBox(将启用设置为false),然后再次按下复选框(据说设置EditText启用)时,我可以' t点击EditText。禁用并重新启用时无法点击EditText

这是java代码

@Override 
public void onCheckedChanged(CompoundButton buttonView, 
     boolean isChecked) { 
    final EditText etPersonTitle = (EditText)v.findViewById(R.id.et_person_title); 
    final EditText etFirstname = (EditText)v.findViewById(R.id.et_first_name); 
    final EditText etSurname = (EditText)v.findViewById(R.id.et_surname); 

    if(isChecked){ 
     etPersonTitle.setText(R.string.unknown); 
     etFirstname.setText(R.string.unknown); 
     etSurname.setText(R.string.unknown); 
    } 

    else { 
     etPersonTitle.setText(""); 
     etFirstname.setText(""); 
     etSurname.setText(""); 
    } 

    etPersonTitle.setEnabled(!isChecked); 
    etPersonTitle.setFocusable(!isChecked); 
    etFirstname.setEnabled(!isChecked); 
    etFirstname.setFocusable(!isChecked); 
    etSurname.setEnabled(!isChecked); 
    etSurname.setFocusable(!isChecked); 
} 

这里是XML:

<TableRow 
       android:id="@+id/tableRow1" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" > 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:gravity="right" 
        android:text="@string/title" /> 

       <EditText 
        android:id="@+id/et_person_title" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:ems="15" 
        android:inputType="textPersonName" 
        android:textAppearance="?android:attr/textAppearanceSmall" > 
       </EditText> 
      </TableRow> 

      <TableRow 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" > 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:gravity="right" 
        android:text="@string/first_name" /> 

       <EditText 
        android:id="@+id/et_first_name" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:ems="15" 
        android:inputType="textPersonName" 
        android:textAppearance="?android:attr/textAppearanceSmall" > 
       </EditText> 
      </TableRow> 

      <TableRow 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" > 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:gravity="right" 
        android:text="@string/surname" /> 

       <EditText 
        android:id="@+id/et_surname" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:ems="15" 
        android:inputType="textPersonName" 
        android:textAppearance="?android:attr/textAppearanceSmall" > 
       </EditText> 
      </TableRow> 

      <LinearLayout 
       android:id="@+id/ll_unknown_customer" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:gravity="center" 
       android:orientation="horizontal" > 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_marginRight="10dp" 
        android:text="@string/unknown_customer" /> 

       <CheckBox 
        android:id="@+id/cb_unknown_customer" 
        style="@style/checkbox_style" 
        android:background="@drawable/checkbox_background" 
        android:button="@null" 
        android:checked="false" /> 

      </LinearLayout> 

有一点要注意的是,TableLayout是滚动型内。我不确定这是什么原因导致这个问题,但这是我的第一个怀疑。

我试图setClickable(true),但它也不起作用。

在此先感谢。

+0

你可以尝试颠倒你的逻辑,以便它变成setEnabled(isChecked);和三个EditTexts的setFocusable(isChecked)?如果问题保持不变,请分享结果。 – helleye 2014-09-05 14:24:42

+0

首先大多数编码器不使用负逻辑!!!!!而且绝对没有人喜欢在某个问题上阅读,因为这意味着怀疑你甚至没有尝试过。 – danny117 2014-09-05 14:27:52

+0

因此,您使用TableLayout提供的XML是单个ListView项目的布局?当使用ListView的自定义ArrayAdapter时,遇到['getView回收原则'](http://stackoverflow.com/a/14108676/1682559)列表对于屏幕来说很大(因此ListView变为滚动)。这个问题很可能存在于ArrayAdapter的getView方法中。从提供的代码中,我无法真正发现问题,但由于过去我在getView回收器方面遇到了一些问题,我认为这也会导致一些问题。 – 2014-09-05 14:56:19

回答

0

这样做。

if (isChecked) { 
       etPersonTitle.setText("asd"); 
       etFirstname.setText("asd"); 
       etSurname.setText("asd"); 
       etPersonTitle.setEnabled(!isChecked); 
       etPersonTitle.setFocusable(!isChecked); 
       etFirstname.setEnabled(!isChecked); 
       etFirstname.setFocusable(!isChecked); 
       etSurname.setEnabled(!isChecked); 
       etSurname.setFocusable(!isChecked); 
      } 

      else { 
       etPersonTitle.setText(""); 
       etFirstname.setText(""); 
       etSurname.setText(""); 

       etPersonTitle.setEnabled(true); 
       etPersonTitle.setFocusableInTouchMode(true); 

       etFirstname.setEnabled(true); 
       etFirstname.setFocusableInTouchMode(true); 

       etSurname.setEnabled(true); 
       etSurname.setFocusableInTouchMode(true); 

      } 
+0

这是我正在寻找的答案。我可以问为什么我必须setFocusableInTouchMode而不是setFocusable? – 2014-09-05 15:25:32