2010-04-05 67 views
0

我想在單個活動中有多個列表視圖。但是一次只能顯示一個 列表視圖。列表視圖將被動態加載 。那麼,我應該如何在同一個 時間填寫所有四個列表視圖,並且只顯示一個?Android中單個Activity中的多個Listviews?

+0

僅顯示一個手段,你要隱藏的樹的其餘部分,或者您希望只顯示一個在時間和具體行動要顯示另一個。 無論你想做什麼,都可以做一件事, 你可以實現代碼,它將加載所有3-4列表視圖中的數據,意味着創建適配器並與列表視圖綁定。然後隱藏3.的其餘部分,並且可以根據需要逐個顯示它們。 – 2010-04-05 05:19:51

回答

0

我使用的方式基本上與顯示多個列表視圖的方式相同,如 ,建議使用setvisibility。

但現在我想要的是所有四個 列表視圖的位圖圖像。假設我的活動開始,並且通過將數據綁定到它們各自的適配器,將數據加載到全部四個列表視圖中。 現在,當我試圖使用getDrawingCache()來獲取位圖時,它總是向我返回null。

那麼,你可以讓我知道如何獲取所有四個 列表視圖的位圖?

public class HomeScreenActivity extends Activity 
{ 
private ImageView imgBabble = null; 
private ListView listBabble = null; 
private ListView listVille = null; 
private ListView listPrivateMsgs = null; 
private ListView listBookmarks = null; 
private List<String> tempBabble = null; 
private List<String> tempVille = null; 
private List<String> tempPrivateMsgs = null; 
private List<String> tempBookmarks = null; 

//RelativeLayouts 
private RelativeLayout babbleLayout = null; 
private RelativeLayout villeLayout = null; 
private RelativeLayout privateMsgsLayout = null; 
private RelativeLayout bookmarksLayout = null; 

//Bitmap 
private Bitmap babbleShrunkView = null; 
private Bitmap villeShrunkView = null; 
private Bitmap privateMsgsShrunkView = null; 
private Bitmap bookmarksShrunkView = null; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
    setContentView(R.layout.homescreen); 
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitle); 

    imgBabble = (ImageView) findViewById(R.id.imgBtnBabble); 
    Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(),R.drawable.babble_top_logo); 
    BitmapDrawable bmpDrawable = new BitmapDrawable(bitmapOrg); 
    imgBabble.setBackgroundDrawable(bmpDrawable); 

    //Initialize the layouts for Babble, Ville, Private Messages and Bookmarks 
    babbleLayout = (RelativeLayout) findViewById(R.id.babbleLayout); 
    babbleLayout.setDrawingCacheEnabled(true); 

    villeLayout = (RelativeLayout) findViewById(R.id.villeLayout); 
    villeLayout.setDrawingCacheEnabled(true); 

    privateMsgsLayout = (RelativeLayout) findViewById(R.id.privatemsgsLayout); 
    privateMsgsLayout.setDrawingCacheEnabled(true); 

    bookmarksLayout = (RelativeLayout) findViewById(R.id.bookmarksLayout); 
    bookmarksLayout.setDrawingCacheEnabled(true); 

    //Babble 
    tempBabble = new ArrayList<String>(); 
    tempBabble.add("First Babble"); 
    tempBabble.add("Second Babble"); 
    tempBabble.add("Third Babble"); 

    listBabble = (ListView) findViewById(R.id.listBabble); 
    listBabble.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, tempBabble)); 
    //babbleShrunkView = babbleLayout.getDrawingCache(); 

    //babbleLayout = (RelativeLayout) findViewById(R.id.listLayout); 

    if(babbleShrunkView == null) 
    { 
     System.out.println("Babble View is null"); 
    } 

    //Ville 
    tempVille = new ArrayList<String>(); 
    tempVille.add("First Ville"); 
    tempVille.add("Second Ville"); 
    tempVille.add("Third Ville"); 

    listVille = (ListView) findViewById(R.id.listVille); 
    //listVille.setDrawingCacheEnabled(true); 
    listVille.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, tempVille)); 
    //villeShrunkView = villeLayout.getDrawingCache(); 

    if(villeShrunkView == null) 
    { 
     System.out.println("Ville View is null"); 
    } 

    //listVille.setVisibility(View.GONE); 

    //Private Messages 
    tempPrivateMsgs = new ArrayList<String>(); 
    tempPrivateMsgs.add("First PM"); 
    tempPrivateMsgs.add("Second PM"); 
    tempPrivateMsgs.add("Third PM"); 

    listPrivateMsgs = (ListView) findViewById(R.id.listPrivateMessages); 
    //listPrivateMsgs.setDrawingCacheEnabled(true); 
    listPrivateMsgs.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, tempPrivateMsgs)); 
    //privateMsgsShrunkView = privateMsgsLayout.getDrawingCache(); 

    if(privateMsgsShrunkView == null) 
    { 
     System.out.println("Private Messages View is null"); 
    } 

    //listPrivateMsgs.setVisibility(View.GONE); 

    //Bookmarks 
    tempBookmarks = new ArrayList<String>(); 
    tempBookmarks.add("First Bookmarks"); 
    tempBookmarks.add("Second Bookmarks"); 
    tempBookmarks.add("Third Bookmarks"); 

    listBookmarks = (ListView) findViewById(R.id.listBookmarks); 
    //listBookmarks.setDrawingCacheEnabled(true); 
    listBookmarks.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, tempBookmarks)); 
    //bookmarksShrunkView = bookmarksLayout.getDrawingCache(); 

    if(bookmarksShrunkView == null) 
    { 
     System.out.println("Bookmarks Messages View is null"); 
    } 

    //listBookmarks.setVisibility(View.GONE); 

    imgBabble.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) 
     { 
      System.out.println("Babble Clicked"); 

      babbleShrunkView = babbleLayout.getDrawingCache(); 
      villeShrunkView = villeLayout.getDrawingCache(); 
      privateMsgsShrunkView = privateMsgsLayout.getDrawingCache(); 
      bookmarksShrunkView = bookmarksLayout.getDrawingCache(); 

      BabbleVilleShrinkView.addBitmap(0, resizeBitmap(200, 200, babbleShrunkView)); 
      BabbleVilleShrinkView.addBitmap(1, resizeBitmap(200, 200, villeShrunkView)); 
      BabbleVilleShrinkView.addBitmap(2, resizeBitmap(200, 200, privateMsgsShrunkView)); 
      BabbleVilleShrinkView.addBitmap(3, resizeBitmap(200, 200, bookmarksShrunkView)); 

      Gallery gallery = new Gallery(getApplicationContext()); 
      gallery.setAdapter(new ImageAdapter(getApplicationContext())); 
     } 
    }); 
} // End of class 
+0

我能夠通過將所有列表視圖的setVisibility設置爲Visible來解決此問題,然後通過getDrawingCache獲取位圖。 – sunil 2010-06-01 10:39:17

0

你可以爲你的問題做一件事。您只會看到一個列表視圖的原因可能是因爲一個列表的高度將具有填充父參數值。你必須做的是,使用絕對佈局或者只是爲每個佈局修正高度。還可以使用滾動視圖來放置控件。此外,如果您在此處發佈您的XML佈局,則可以更輕鬆地回答您的查詢以瞭解需要進行更改的位置。

0

您應該使用FrameLayout;它允許對其子視圖進行z排序,這意味着您可以將您的ListView堆疊在一起。然後,您可以使用View#setVisibility()方法從代碼中切換每個ListView的可見性。 您將爲每個這些ListView創建合適的適配器,並且無論何時要繪製ListView,框架都會調用所需適配器的getView()方法。

+0

我已經使用了大部分顯示多個列表視圖的相同方式,就像您使用setvisibility參數所建議的那樣。但現在我想要的是所有四個列表視圖的位圖圖像。假設我的活動開始,並且通過將數據綁定到它們各自的適配器,將數據加載到所有四個列表視圖中。現在,當我試圖使用getDrawingCache()獲取位圖時,它總是向我返回null。 那麼,你能告訴我如何獲取所有四個列表視圖的位圖嗎? – sunil 2010-04-05 12:05:43

4

而不是使用所有的代碼在列表視圖之間翻轉爲什麼不把所有的ListView放在ViewFlipper中?它是最簡單的方法,需要幾乎1行的代碼! :)

-Moto

相關問題