再談談ListView

來源:互聯網
上載者:User

    ListView這個控制項可謂是用處多多,最近使用ListView遇到了一些問題,在解決之後一來想留個記錄,二來想分享一下我的問題,在大家遇到後能夠快速解決。

    功能說明:

    實現多個版面的滑動顯示,同時多個版面中的ListView中Item要能夠響應點擊並跳轉至顯示詳細資料的Activity中。

    痛點:

    ①滑動顯示時,在ListView中的滑動效果會被本身的Item點擊效果所遮蓋,從而只能在離開ListView的地方進行滑動操作,這個問題有許多中解決方案,但最簡單的就是在Activity中重寫dispatchTouchEvent()方法,如下所示:

// 重寫這個方法實現在ListView中滑動切換View
 @Override
 public boolean dispatchTouchEvent(MotionEvent ev) {
  // TODO Auto-generated method stub
  this.mGestureDetector.onTouchEvent(ev);
  
  return super.dispatchTouchEvent(ev);
 }

很簡單的解釋就是在“分發觸摸事件”處理中,先處理手勢左右滑動的事件響應,再去處理父類的事件處理響應(對於Button的處理與之相同)。

        ②從一組View滑動至另一組時ListView中的內容顯示不出來。我之前一直使用的是直接從ListActivity中繼承,這樣就使得我的布局檔案中對ListView控制項的id屬性只能有一種寫法:android:id="@id/android:list"。即不能給ListView控制項加上能夠在“.java”檔案中被引用的id,這樣使得滑動顯示的ListView中沒有內容。這個問題可以這樣解決:

直接繼承Activity,然後在Activity中定義ListView的對象,在xml檔案中給出ListView控制項的id,在“.java”檔案中綁定一下,其他動作與之前沒有多大區別,在最後設定監聽時要採用如下的方法:

listView.setOnItemClickListener(new OnItemClickListener(){

   public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    // TODO Auto-generated method stub
    switch((int)arg3){
    case 0:
     intent.putExtra("title", getString(R.string.ti_frnew01));
     intent.putExtra("txt", getString(R.string.frnew01));
     intent.setClass(FrontPage.this, DetailNew.class);
     startActivity(intent);
     break;

    // 省略......

     }

  }

}

這樣就實現了對Item點擊的監聽,而arg3所對應的就是id。

這樣問題就解決了,既能夠在ListView或Button中實現滑動,也能使得滑動過去的版面中的ListView中有內容。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.