2014-01-09 20 views
2

我正在使用CardScrollView在沉浸式應用中呈現一堆內容,我不想使用標準Card,因爲我希望更多地控制佈局。在CardScrollView中使用自定義卡片?

我有一個xml佈局文件,它定義了我想要的佈局,但我很難弄清楚如何在代碼中創建此佈局的本地實例,以便我可以獲取/設置其組件並將它們添加到我的卡片滾動適配器的列表。

有沒有人做過這個,或知道我在哪裏可以找到一個例子或教程或什麼?

謝謝!

這裏是到目前爲止(其在活動的onCreate方法)

setContentView(R.layout.activity_menu_top); 

viewCards = new ArrayList<RelativeLayout>(); 
TextView tv; 

RelativeLayout layout = (RelativeLayout) findViewById(R.id.layout_menutop); 

tv = (TextView) layout.findViewById(R.id.textSectionTitle); 
tv.setText("Appetizers"); 
tv = (TextView) layout.findViewById(R.id.textPreviousItem); 
tv.setText(""); 
tv = (TextView) layout.findViewById(R.id.textNextItem); 
tv.setText("Entress >"); 
viewCards.add(layout); 

    //repeat that last chunk a bunch of times 

menuCSV = new CardScrollView(this); 
menuCSV.setOnItemClickListener(this); 
adapter = new MenuCardScrollAdapter(); 
menuCSV.setAdapter(adapter); 
menuCSV.activate(); 

setContentView(menuCSV); 

的「TextView的」 IDS我引用是「RelativeLayout的」兒童的意見,我是我試過的代碼已經在我的佈局xml中定義了。我已經在上面的代碼中嘗試了一些變體,並且我很難弄清楚獲取和設置這些元素的正確方法,然後將它們作爲「CardScrollAdapter」的單個對象粘在列表中。我相信這應該是非常簡單的,但我無法弄清楚我錯過了什麼。

再次感謝!

+0

您能否發佈您用於CardScrollView的代碼? –

+0

代碼發佈;謝謝! – Jennifer

回答

5

不知道你的CardScrollAdapter樣子,一般的想法是做這樣的事情:你可以創建CardScrollAdapter一個子類,它需要的意見在其構造一個列表,然後返回內部getView一個合適的:

private class YourCardScrollAdapter extends CardScrollAdapter { 

    private List<RelativeLayout> mViews; 

    public YourCardScrollAdapter(List<RelativeLayout> views) { 
     mViews = views; 
    } 

    // ...other methods... 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     return mViews.get(position); 
    } 
} 

這個方法是好的,如果你有一個小數目的固定卡(例如,如果你使用像一組固定的選項的菜單滾動條)。如果您使用的動態卡片的內容和數量可能因其他因素而異,則可能需要考慮在getView內充氣和填充佈局,而不是預充充氣。這樣,只有當前用戶正在查看的視圖在內存中(並且每邊都有一對,以便更快地滾動),但其餘部分只有在需要時纔會加載,以便更好地保護資源。

+0

感謝評論託尼,但我不認爲適配器是問題(你的建議是我已經有了)。這個問題似乎與得到佈局xml資源。如果我不使用它來設置我的卡片,那麼一切都運行良好(儘管看起來很糟糕,因爲我沒有設置任何佈局參數)。當我嘗試使用xml設置佈局及其組件時,我得到各種運行時異常,因爲它沒有找到資源,或者不喜歡關於如何設置它們的事情。有關如何獲取佈局資源以供除Activity之外的其他用途的任何想法? – Jennifer

+2

原始帖子中的代碼是否都在同一個方法中?如果是這樣,它看起來像多次調用'setContentView',這會導致問題,因爲它會爲整個活動設置佈局。這聽起來像你想要做的就是調用'getLayoutInflater()'獲得'LayoutInflater'服務,然後調用它的'inflate'方法將你的XML資源轉換爲一個視圖層次結構。爲每個卡調用一次該方法將爲您提供獨立的視圖層次結構,以便您可以將各個字段設置爲不同的值,然後將頂層視圖放入適配器中。 –

相關問題