2012-12-18 102 views
1

我有一個焦點ListView包含edittext的問題。 我使用方法OnItemClickListener來選擇Listview的行,但是當我點擊編輯文本時,它不會選擇該行。在ListView中的EditText焦點

我希望當我點擊edittext時,由於方法OnItemClickListener的選擇,而edittext需要重點修改文本。

我在這方面失去了很多時間。 謝謝。

這是代碼。

list.xml

<ListView 
    android:id="@android:id/list" 
    android:layout_width="match_parent" 
    android:layout_height="312dp" 
    android:descendantFocusability="beforeDescendants">    
</ListView> 

row.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/record" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal" 

<TextView 
    android:id="@+id/itemOra" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:text="Ora" 

<TextView 
    android:id="@+id/itemPrezzo" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.8" 
    android:focusable="false" 
    android:paddingBottom="3dip" 
     android:text="Prezzo" 
    android:textColor="#4d4d4d" 
    android:textSize="18dip" 
     /> 

    <EditText 
    android:id="@+id/itemMotivo" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.8" 
    android:text="Motivo" 
    android:textColor="#4d4d4d" 
    android:textSize="18dip"> 

activity.java

.......... 

public void attachItemListener(){  

    searchResults.setOnItemClickListener(new OnItemClickListener() { 
     private Flusso corrente; 

     public void onItemClick(AdapterView<?> parent, View view, int position, 
       long id) { 
      // TODO Auto-generated method stub 

      //NOW EDITTEXT CAN TAKE THE FOCUS. 

Adapter.java

  public class Adapter extends ArrayAdapter<Flusso> { 
       public List<Flusso> flussi; 

       public Adapter(Context context, int textViewResourceId, 
         List<Flusso> flussi) { 
        super(context, textViewResourceId, flussi); 
        this.flussi = flussi; 
       } 

       @Override 
       public View getView(int position, View convertView, ViewGroup parent) { 
        return getView(position, convertView, parent, R.layout.row); 
       } 
       public View getView(int position, View convertView, ViewGroup parent, int layout) { 
        View v = convertView; 
        if (v == null) { 
         LayoutInflater vi = (LayoutInflater)  
           this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
         v = vi.inflate(layout, null); 
        } 

        Flusso flow = flussi.get(position); 
        if (flow != null) { 
         TextView prezzo = (TextView) v.findViewById(R.id.itemPrezzo); 
         EditText motivo = (EditText) v.findViewById(R.id.itemMotivo); 

         TextView ora = (TextView) v.findViewById(R.id.itemOra); 

         prezzo.setText(Float.toString(flow.get_euro())); 
         motivo.setText(flow.get_perche()); 

        } 
        return v; 
       } 

      } 

這是代碼。我不知道焦點或其他屬性是否有問題。 用onTouchEvent方法嘗試,但它不起作用。

我需要你的幫助。 謝謝

+0

你是說你有代碼在'OnItemClickListener'中執行,但不是當你點擊一個'EditText'時? – mango

+0

我在說setOnItemClickListener不關注EditText。 – Marc

+0

相關/ dupe:[ListView中的可聚焦EditText](http://stackoverflow.com/q/2679948) – blahdiblah

回答

0

爲了做你正在談論的,你將不得不覆蓋EditTextonTouchEvent(MotionEvent)被觸摸後返回false。事情是這樣的:

boolean onTouchEvent(MotionEvent e) { 
    super.onTouchEvent(e); 
    return false; 
} 

注:這可能是不一致的,現在這兩種觀點將得到MotionEvent。這通常不是一件好事。

發生了什麼事情,您的列表視圖從contentView中發送了一個MotionEvent。然後列表視圖顯示「更好地檢查我的孩子是否需要我之前的MotionEvent」,並將其傳遞給其子女以查看他們是否首先喜歡Cookie。然後,如果有剩餘的餅乾(所有兒童的onTouchEvent(MotionEvent)調用返回false)然後列表視圖將吃掉事件並完成它的事情。 Android中的觸摸水印一般是從下到上。

+0

謝謝,但它不起作用。我在這個問題上添加了我的代碼。你可以幫我嗎?謝謝 – Marc

+0

,我不能使用後代Focusability或設置focusable()? – Marc

0

so..it不是說你知道你的OnClickListener沒有響應,而是你的EditText在聽者被激活後沒有注意到,是對的嗎?你是否試圖在聽衆中請求焦點?

searchResults.setOnItemClickListener(new OnItemClickListener() { 
     private Flusso corrente; 

     public void onItemClick(AdapterView<?> parent, View view, int position, 
       long id) { 
      ...... 
      edittext.requestFocus();         
     } 
    });