2013-10-11 39 views
2

我发现EditText的FocusChange行为在ListView中的EditText时不同。 我的测试程序有两个EditText。一旦在Activity上,另一个在ListView中。EditText在ListView中的行为

以下是当我输入正常Editext文字和失去焦点

10-11 16:26:32.440: INFO/Test(4317): 1:onFocusChange:false 
10-11 16:26:32.490: INFO/Test(4317): 2:onFocusChange:true 

以下是日志,当我输入列表视图中Editext文字和失去焦点的日志

10-11 16:28:17.551: INFO/Test(4317): 2:onFocusChange:false 
10-11 16:28:17.609: INFO/Test(4317): 2:onFocusChange:true 
10-11 16:28:17.679: INFO/Test(4317): 2:onFocusChange:false 
10-11 16:28:17.719: INFO/Test(4317): 1:onFocusChange:true 

日志告诉我,列表视图中的EditText将会触发多于1次焦点变化。 这种行为是否有缺陷

我使用的是android 4.0.3 sdk。

以下是XML

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

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

    <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/editText1" android:layout_gravity="center"/> 
    <ListView 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 

      android:id="@+id/listView"/> 
</LinearLayout> 

这里是代码

public class EditTextActivity extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     super.setContentView(R.layout.edit_text_activity); 

     final EditText editText = (EditText) findViewById(R.id.editText1); 
     editText.setWidth(200); 
     editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
      @Override 
      public void onFocusChange(View view, boolean hasFocus) { 
       Log.i("Test", "1:onFocusChange:" + hasFocus); 
       editText.setText(""); 
      } 
     }); 

     ListView listView = (ListView) this.findViewById(R.id.listView); 
     listView.setAdapter(new BaseAdapter() { 
      @Override 
      public int getCount() { 
       return 1; 
      } 

      @Override 
      public Object getItem(int i) { 
       return null; 
      } 

      @Override 
      public long getItemId(int i) { 
       return 0; 
      } 

      @Override 
      public View getView(int i, View view, ViewGroup viewGroup) { 
       LinearLayout layout = new LinearLayout(viewGroup.getContext()); 

       final EditText editText = new EditText(viewGroup.getContext()); 
       editText.setId(1); 
       editText.setLayoutParams(new ViewGroup.LayoutParams(200,ViewGroup.LayoutParams.WRAP_CONTENT)); 
       editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
        @Override 
        public void onFocusChange(View view, boolean hasFocus) { 
         Log.i("Test", "2:onFocusChange:" + hasFocus); 
         editText.setText(""); 
        } 
       }); 

       layout.addView(editText); 

       return layout; 
      } 
     }); 

    } 
} 
+0

怎么办你让它失去焦点?你是否选择了其他EditText? – Terry

+0

我触摸另一个EditText。 – Eagle

回答

-1

清单中添加下面为您的活动 -

android:windowSoftInputMode="adjustPan" 
+0

我在清单中为我的活动添加了android:windowSoftInputMode =“adjustPan”,但行为相同。它仍然没有解决 – Eagle

0

的EditText上丢失和恢复的重点是不是一个错误;你可以按下键盘上的某个键来获得焦点,但是当你放开键时,edittext会重新获得焦点。你想做什么?是用于搜索的edittext并添加到列表视图中?