2013-07-05 35 views
0

我遇到了第一個Android版式的問題。在我的界面上,我的界面頂部有一個EditText,下面有一個ListView,展示了一系列元素。我想讓EditText失去焦點,虛擬鍵盤在用戶觸碰ListView時消失。我立足於此頁面http://developer.android.com/guide/topics/ui/ui-events.htmlOnTouchListener阻止ListView交互

問題是,雖然我的代碼這樣做,但它也阻止任何其他形式的與ListView本身的交互(無法在ListView中進行導航或選擇元素)。有沒有辦法重新建立默認行爲以及我添加的行爲?

這裏是我的MainActivity.java:

public class MainActivity extends Activity { 

    // Variable declarations 
    EditText ed; 
    ListView lv; 

    // Function called when the application starts 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Elements declaration 
     ed = (EditText) findViewById(R.id.search_text); 
     lv = (ListView) findViewById(R.id.media_list); 

     // Events declaration 
     lv.setOnTouchListener(listViewListener); 

     // We create a task to load the media list in a different thread. 
     DownloadMediaList task = (DownloadMediaList) new DownloadMediaList (MainActivity.this,new TheInterface() { 
      @Override 
      public void theMethod(ArrayList<Media> result) { 
       lv.setAdapter(new MediathequeListAdapter(MainActivity.this, result)); 
      } 
     }).execute(); 


    } 

    private OnTouchListener listViewListener = new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent motion){ 
      ed.clearFocus(); 
      InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(ed.getWindowToken(), 0); 
      return true; 
     } 

    }; 

    // Interface to communicate with the async load. 
    public interface TheInterface { 
     public void theMethod(ArrayList<Media> result); 

     } 

} 

編輯:這是我的主要佈局是否有幫助:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:descendantFocusability="beforeDescendants" 
    android:focusableInTouchMode="true" > 

    <LinearLayout android:id="@+id/container_search" 
     android:layout_width="fill_parent" 
     android:layout_height="50dp" 
     android:paddingLeft="5dp" 
     android:paddingRight="5dp"> 

     <EditText android:id="@+id/search_text" 
      android:inputType="text" 
      android:hint="@string/search_bar" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.80" /> 

     <Button android:id="@+id/search_button" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="0.20" /> 

    </LinearLayout> 

    <ListView 
     android:id="@+id/media_list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:dividerHeight="1dp" /> 

</LinearLayout> 

回答

1

返回falseonTouch()。否則,你告訴系統你已經處理了所有的觸摸事件。

+0

謝謝,那是我的愚蠢 – Sefam