2012-03-25 69 views
1

我見過很多次這個問題,我認爲這不是很難解決;仍然我已經嘗試了幾個小時,不能得到它的工作原理。Android:爲什麼我的EditText字段失去焦點?

簡單的問題:我在列表視圖中有2個EditText,當我觸摸它們的字段時,它們都立即鬆開焦點。

必須是一些層次結構的東西。其實我可以用adjustpan屬性修復它,但是當softKeyboard打開時,我的listView不再滾動。

這裏是我的代碼:

package com.android.activity; 

import android.content.Context; 
import android.database.Cursor; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.CursorAdapter; 
import android.widget.EditText; 
import android.widget.TextView; 

public class NotesCursorAdapter extends CursorAdapter{ 

    private Context context; 
    // private Cursor cursor; 
    private int addNoteTopPosition; 
    private int addNoteBottomPosition; 
    private LayoutInflater inflater; 
    private boolean deleteMode = false; 

    private static final int TYPE_ITEM = 0; 
    private static final int TYPE_ADD_NOTE_BOTTOM = 1; 
    private static final int TYPE_ADD_NOTE_TOP = 2; 
    private static final int TYPE_MAX_COUNT = TYPE_ADD_NOTE_TOP + 1; 

    public NotesCursorAdapter (Context context, Cursor cursor, int flag, boolean enableDelete){ 
     super(context, cursor); 
     this.context = context; 
     addNoteTopPosition = 0; 
     addNoteBottomPosition = cursor.getCount()+1; 

     inflater = LayoutInflater.from(this.context); 

     deleteMode = enableDelete; 

    } 

    @Override 
    public int getCount() { 
     return super.getCount() + 2; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent){ 
     ViewHolder holder = null; 
     int type = getItemViewType(position); 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      switch (type) { 

      case TYPE_ADD_NOTE_TOP: 
       convertView = inflater.inflate(R.layout.add_note_top, null); 
       holder.view = (EditText)convertView.findViewById(R.id.add_note_top_id); 
       break; 
      case TYPE_ITEM: 
       convertView = inflater.inflate(R.layout.row_note, null); 
       holder.delete = (Button)convertView.findViewById(R.id.delete); 
       if (deleteMode){ 
        holder.delete.setVisibility(View.VISIBLE); 
       }else{ 
        holder.delete.setVisibility(View.GONE); 
       } 
       holder.delete.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 

        } 
       }); 

       holder.view = (TextView)convertView.findViewById(R.id.note); 
       getCursor().moveToPosition(position - 1); 
       ((TextView) holder.view).setText(getCursor().getString(getCursor().getColumnIndex("content_note"))); 
       break; 
      case TYPE_ADD_NOTE_BOTTOM: 
       convertView = inflater.inflate(R.layout.add_note_bottom, null); 
       holder.view = (EditText)convertView.findViewById(R.id.add_note_bottom_id); 
       break; 
      } 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder)convertView.getTag(); 
     } 

     return convertView; 
    } 

    @Override 
    public int getItemViewType(int position) { 
     int type; 
     if (position == addNoteTopPosition){ 
      type = TYPE_ADD_NOTE_TOP; 
     } else if (position == addNoteBottomPosition){ 
      type = TYPE_ADD_NOTE_BOTTOM; 
     }else { 
      type = TYPE_ITEM; 
     } 
     return type; 
    } 

    @Override 
    public int getViewTypeCount() { 
     return TYPE_MAX_COUNT; 
    } 

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

    public static class ViewHolder { 
     public View delete; 
     public View view; 
    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 

    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
     return null; 
    } 

} 

下面是XML文件:

的main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/rootLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/background_diary_big" 
    android:focusable="false" 
    android:orientation="vertical" > 

    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="60dp" 
     android:layout_gravity="right" 
     android:gravity="fill_vertical" 
     android:orientation="horizontal" 
     android:paddingRight="10dp" 
     android:paddingTop="10dp" > 

     <LinearLayout 
      android:id="@+id/linearLayout1" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:orientation="vertical" > 

      <Button 
       android:id="@+id/calendar" 
       android:layout_width="50dp" 
       android:layout_height="50dp" 
       android:layout_gravity="right" 
       android:background="@drawable/calendar_up" /> 
     </LinearLayout> 

     <TextView 
      android:id="@+id/currentDay" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_gravity="center_vertical|center_horizontal" 
      android:layout_weight="0.5" 
      android:gravity="center_vertical|center_horizontal" 
      android:textAppearance="?android:attr/textAppearanceLarge" /> 

     <LinearLayout 
      android:id="@+id/linearLayout2" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:gravity="center_vertical|center_horizontal" 
      android:orientation="vertical" > 

      <Button 
       android:id="@+id/done" 
       android:layout_width="50dp" 
       android:layout_height="50dp" 
       android:background="@drawable/pen_blue_big" /> 
     </LinearLayout> 
    </LinearLayout> 

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

     <ListView 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/main_list" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_marginLeft="10dip" 
      android:layout_marginRight="10dip" 
      android:cacheColorHint="#00000000" 
      android:descendantFocusability="beforeDescendants" > 
     </ListView> 
    </LinearLayout> 

</LinearLayout> 

add_note_top.xml:

<?xml version="1.0" encoding="utf-8"?> 
<EditText xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/add_note_top_id" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="#00000000" 
    android:hint="@string/add_note" 
    android:textColor="#000000" > 

</EditText> 

add_note_bottom.xml :

<EditText 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/add_note_bottom_id" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:hint="@string/add_note" 
     android:background="#00000000" 
     android:textColor="#000000" > 
    </EditText> 

row_note.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/layoutContainer" 
    android:layout_width="fill_parent" 
    android:layout_height="60dp" 
    android:layout_gravity="right" 
    android:gravity="fill_vertical" 
    android:orientation="horizontal" 
    android:paddingRight="10dp" 
    android:paddingTop="10dp" > 

    <Button 
     android:id="@+id/delete" 
     android:layout_width="21dp" 
     android:layout_height="22dp" 
     android:background="@drawable/sens_interdit" /> 

    <TextView 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/note" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:duplicateParentState="true" 
     android:focusable="false" 
     android:textColor="#000000" > 
    </TextView> 

</LinearLayout> 

我想我把重要的,如果你們需要一些更喜歡活動代碼或別的什麼,只是問。

感謝您的閱讀。

+1

你的背景和文本顏色相同。我想知道這是否是問題。 – Siddharth 2012-06-01 02:31:56

+0

那麼這是一個好點啊哈。但我找到了問題,我忘記了我的stackoverflow後。只是讓人們知道,這是listview-edittext的常見問題。在adjustresize模式下,如果將焦點放在編輯文本上,由於softkeyboard幽靈的重新調整,它將失去焦點。所以我發現了一個不太好看的解決方法,它在鍵盤出現後將焦點放在該editext上;具體來說,調用每個軟鍵盤上調用的活動的監聽器上的edittext.requestfocus()會出現。仍然您的評論是有用的,注意到一個錯誤,謝謝=) – 2012-06-01 04:24:33

回答

0

嘗試設置

android:windowSoftInputMode="adjustPan" 

爲您的活動在AndroidManifest.xml