2014-11-05 74 views
0

在列表視圖中,我通常在我的自定義CursorAdapter的bindView()方法定義按鈕onClickListeners。例如:onClickListeners在bindView()或擴展視圖

private class MyCustomAdapter extends CursorAdapter{ 

    ... 
    ... 
    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
     ... 
     viewHolder.btn1.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View arg0){ 
       ... 
       new myDao().updateSomethingInDB(myObject); 
       getActivity().getContentResolver().notifyChange(myContentProviderUri, null);    
      } 
    } 

    ... 
    ... 
} 

這似乎真是浪費爲匿名內部類必須在view.setOnClickListener()方法每次bindView()運行創建。

會是有意義的創建有自己的類定義中定義他們的聽衆,而不是擴展的看法?因此,不是用我的列表視圖的項目佈局Button的,我將使用延伸按鈕意見一樣LikeButtonDislikeButtonUpVoteButton等等。這樣所有的行爲(如更新數據庫,通知內容解析器等)被封裝在擴展視圖而不是活動/片段?它違反任何設計原則(如可能MVC)?

+0

兄弟你的問題不清楚...... – 2014-11-05 05:20:36

+0

有關@HareshChhelana抱歉。我試圖用一些代碼來澄清它。請看看。 – faizal 2014-11-05 05:31:13

+0

如果您有列表項多於一個孩子點擊偵聽器,那麼它是正確的方式,否則您可以使用列表itemclick監聽器外部適配器。 – 2014-11-05 05:36:26

回答

0

我不覺得設計原則的違反。我在我的應用程序實現類似的事情和應用工作flowlessy中的任何設備。

在您對設計原則的關注方面,您對此非常擔心,因爲您可以在不影響應用程序性能的情況下完成工作。

用戶永遠不知道應用程序是如何設計的。他們所困擾的是,是的!這個應用程序工作快速,順利。我應該使用這個。

U可以更多地瞭解ListView的在谷歌I/O的位置:https://www.youtube.com/watch?v=wDBM6wVEO70

+0

你不覺得性能會因爲這種方法而受到打擊嗎?因爲bindView()會爲每個列表視圖項目運行,並且每次一個項目都滾動到屏幕的可見區域時? – faizal 2014-11-05 05:42:47

+0

不可以。除非你的listview有一些1000-2000行。另外,你應該爲行內容使用不同的對象類,然後設置Setters和Getters。我已經用googl關於listview的I/O鏈接更新了我的答案。它是大約1小時,但是一個小時值得花費 – 2014-11-05 05:53:48

1

會是有意義的創建有自己的類定義中定義他們的聽衆,而不是擴展的看法?

是的。創建實現其內部小部件事件的複合/自定義視圖是有意義的。 也可能是更有效的實例化複合視圖中的只有一次偵聽器,然後創建偵聽器的新實例每次調用bindView() 當然,這樣做的決定取決於具體的用例,它們是什麼依賴和關係與它們駐留在活動或片段。

在這種方式,所有的行爲(如更新數據庫,並通知內容解析器等)被封裝在擴展視區,而不是在活動/片段?

只要你知道你在做什麼,我就沒有看到任何問題。

  • 取消或視圖正確的時間dissmising網絡操作或異步任務的聽衆:要知道自己在做什麼,因爲有陷阱的很多的,你可以愛上,如果你不小心,這一點很重要週期

  • 釋放,可能會導致內存泄漏如果不是在視圖和活性的合適的時間釋放lifeycle

  • 每次「結合」和「未結合」的化合物視圖DTO對象之間的引用它在列表視圖

    內使用時被回收

和更多...

+0

我擔心的一件事是混合模型和MVC架構的視圖組件。如果我採用在擴展視圖中整合數據庫操作和其他數據相關行爲的方法,我擔心代碼會非常快地變得非常混亂。 – faizal 2014-11-05 05:57:29

+0

事實上,你處理複合視圖內的點擊事件根本沒有說所有的邏輯都應該在那裏。例如:在我自己的應用程序中 - 執行諸如「喜歡」和「不喜歡」之類的操作時,我會從服務執行所有網絡操作,該服務以正確的命令和自定義視圖中的參數開始。當服務命令完成時 - 服務本身在進行數據庫/內容提供者的更改,併發送廣播指示我的Loaders可用新內容... – 2014-11-05 06:05:16

+0

因此,在複合視圖類的onClickListener中,您有對服務的調用?或者你是否在活動/片段類中調用服務? – faizal 2014-11-05 06:11:11