2012-01-28 42 views
3

繼續從以前的問題我試圖在GridView內獲得多個(小部件或在這種情況下WebView s)。GridAdapter for Gridview內部Gridview

所以我真的不知道該怎麼做,是否要製作我自己的適配器(當時看起來很可怕),或者創建一個ArrayAdapter<WebView>

我不確定ArrayAdapter是否可以像這樣接受它,或者它只支持原始類型。

GridView contentGrid; 
LinearLayout contentLayout; 

WebWidget[] webWidgets; 

WebWidget web1; 
WebWidget web2; 
WebWidget web3; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    web1 = new WebWidget(this, "http://www.google.ie"); 
    web2 = new WebWidget(this, "http://www.facebook.com"); 
    web3 = new WebWidget(this, "http://www.youtube.ie"); 

    webWidgets = new WebWidget[]{web1,web2,web3}; 

    contentGrid = (GridView) findViewById(R.id.contentGrid); 

      //Heres my attempt at an adapter for webview 
    ArrayAdapter<WebView> adapter = new ArrayAdapter<WebView>(this, 
      android.R.layout.simple_list_item_1, webWidgets); 

    contentGrid.setAdapter(adapter); 

不幸的是,出來的是字符串版本的WebView

所以問題是我可以這樣做,還是我更好地製作自己的CustomAdapter?

注意:有人可能會指出關於第二個構造函數變量是什麼的一些信息? I.E android.R.layout.simple_list_item_1

回答

1

無論您如何實現您的Adapter,都無法可靠地將可滾動窗口小部件放置在其他可滾動窗口小部件中,至少在同一方向滾動的位置。由於WebViewGridView都是垂直滾動的,因此嘗試以這種方式組合它們會導致不可靠的結果。

就這樣,在一些你的發言和提問的:

我真的不知道,如果ArrayAdapter能接受這樣的,或者如果它僅支持基本類型。

ArrayAdapter可以修改任何您喜歡的數據類型的Java數組或ArrayList

不幸的是,網絡視圖的字符串版本......注意:有人可能會指出一些關於第二個構造函數變量是什麼的信息?即android.R.layout.simple_list_item_1

第二個構造函數變量是你想要在你的GridView細胞的樣子。就你而言,你正在指定一個內置的佈局資源TextView。因此,您告訴Android您希望所有網格單元格都是TextView小部件。 Android會調用數組中的對象toString(),將結果倒入TextView中,TextViews將放入網格單元格中。

如果你希望你的ArrayAdapter要返回其他的東西比TextView,你需要重寫getView()和處理更多的是自己,可能使用自己創造的佈局文件。

所以問題是我可以這樣做,還是我更好地製作自己的CustomAdapter?

正如我在回答一開始就指出的那樣,你想要的東西根本無法可靠地工作。

假裝爲在GridViewWebViews會的工作,最簡單的解決辦法是讓你在自己的ArrayAdapter子類中覆蓋getView(),正如我前面提到的那一刻。這是一個覆蓋這個過程的free excerpt from one of my books

+0

啊。這很有道理。關於網格中的網頁瀏覽,我知道這似乎有點奇怪。但基本上,網頁瀏覽將包含個別的JavaScript小部件。每一個都略有不同,並且不會被滾動。把它想象成一個3x3網格上帶有不同小部件的快速應用程序。 – OVERTONE 2012-01-28 22:49:50