2016-10-25 32 views
1

在我的Android項目, 我得到的數據列表數組列表中附加的ArrayList <object>到的ListView -Android

ArrayList<Items> item = db.getAllMenu(); 

,但現在我想這個數據添加到列表視圖, 我想作爲,

ListView lv=(ListView)findViewById(R.id.list_view_inside_nav); 
String[] lv_arr = {}; 
     lv_arr = (String[]) item.toArray(); 
     lv.setAdapter(new ArrayAdapter<String>(MainActivity.this, 
       android.R.layout.simple_list_item_1, lv_arr)); 

但它給人error.because我試圖arratlist轉換爲字符串.. 有人plz幫助我,怎麼到ArrayList轉換爲字符串[]

這裏是我的一些文件... items.java(getter和setter方法)

public class Items { 
    //private variables 

    String _name; 
    // Empty constructor 
    public Items(){ 
    } 

    // constructor 
    public Items(String name){ 

     this._name = name; 

    } 

    // getting name 
    public String getName(){ 
     return this._name; 
    } 
    // setting name 
    public void setName(String name){ 
     this._name = name; 
    } 


} 

,我使用此代碼從數據庫

public ArrayList<Items> getAllMenu() { 
    ArrayList<Items> passList = new ArrayList<Items>(); 
    // Select All Query 
    String selectQuery = "SELECT * FROM " + CATEGOTY_TABLE_NAME; 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    // looping through all rows and adding to list 
    if (cursor.moveToFirst()) { 
     do { 
      Items menu = new Items(); 

      menu.setName(cursor.getString(0)); 

    // Adding category to list 
      passList.add(menu); 
     } while (cursor.moveToNext()); 
    } 
    // return category list 
    return passList; 
} 
+0

使用自定義列表適配器。 –

+0

'items'的類型是'ArrayList ',你不能將它轉換爲'String []'。什麼是'Items'對象的'String'表示? – Egor

+0

@brijeshkumar,爲什麼? – Egor

回答

0

這裏你的問題是,你正嘗試將列表轉換爲數組,這可以不要做演員,但存在方法。

最簡單的方法是使用方法List.toArray(E [])將列表轉換爲數組。

ArrayList<Items> items = db.getAllMenu(); 
Items[] itemsArray = new Items[items.size()]; //Create the array to the correct size, 
itemsArray = items.toArray(itemsArray); //Fill the array with the list data 
//you could cast into Item[] directly but this is cleaner 

幫助使用這裏:Convert ArrayList<String> to String[] array

數組必須是項目的數組

然後,如果你有重寫你的項目類的toString方法返回像字符串你要。

public class Items { 
    ... 

    @Override 
    public String toString(){ 
     this.getName() //Just an example ;) 
    } 
    ... 
} 

這會像魅力一樣工作。適配器使用此方法獲取要打印的字符串。

編輯:

經過一番研究,你甚至不需要創建一個數組。 ArrayAdapter接受一個列表,所以你只需要重寫Items.toString()

https://developer.android.com/reference/android/widget/ArrayAdapter.html

你可以在這裏看到需要重寫toString

但是TextView的引用,它會充滿了toString( )數組中的每個對象。您可以添加自定義對象的列表或數組。重寫對象的toString()方法以確定列表中的項目將顯示哪些文本。

這裏是使用

ArrayAdapter(上下文的背景下, INT資源, List對象)

所以您只需建立適配器這樣的構造:

new ArrayAdapter<Items>(MainActivity.this, 
      android.R.layout.simple_list_item_1, item); 
+0

是的,它非常簡單...:D –

+0

@varshavalanju你很接近,我甚至沒有意識到你試圖完成ArrayAdapter的建議,直到我重新打開這個問題。請記住,這對於使用toString()來可視化對象(不總是但幾乎)的GUI來說很常見。 – AxelH

0

錯誤中獲取數據。 Items類不能轉換爲String類。 您需要將每個Items轉換爲String對象。

例子:

說你的類項目

class Items{ 
    public String itemName; 
} 

在你的代碼更改

String[] lv_arr = new String[items.size()]; 

for(int i=0;i<items.size();i++){ 
    lv_arr[i]=item.get(i); 
} 

lv.setAdapter(new ArrayAdapter<String>(MainActivity.this, 
      android.R.layout.simple_list_item_1, lv_arr)); 
+0

你會PLZ告訴我@ Godwin,lv_arr [i] = item.get(i);這裏是什麼item.get?它給我錯誤,是類名還是allaylist? –

+0

對不起,ArrayList * –

+0

@varshavalanju我認爲item.get應該是像列表'列表 item = new ArrayList()<>'。 'lv_arr'是一個'String'數組,它的內容在'for'語句 –

0

你必須使對象的數組列表在這裏做這樣的事情是一塊我的代碼,我使用

我的ArrayList

private ArrayList<Mediafileinfo> songList = new ArrayList<Mediafileinfo>();

在ArrayList對象添加數據。

Mediafileinfo info = new Mediafileinfo(); 
        info.setFile_uri(Uri.parse(audioCursor.getString(audiodata))); 
        info.setName(audioCursor.getString(audioTitle)); 
        info.setDuration(audioCursor.getLong(audioduration)); 
        info.setAlbum(audioCursor.getString(audioalbum)); 
        info.setAlbum_Art_uri(ContentUris.withAppendedId(albumArtUri, audioCursor.getLong(audioalbumid))); 
        songList.add(info); 

請與getter和setter

public class Mediafileinfo { 
private String name,album,artist; 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getAlbum() { 
    return album; 
} 

public void setAlbum(String album) { 
    this.album = album; 
} 

public String getArtist() { 
    return artist; 
} 

public void setArtist(String artist) { 
    this.artist = artist; 
} 
} 

類,並在您的ArrayList適配器這樣調用

Mediafileinfo mediafileinfo = (Mediafileinfo) getItem(position); 
    TextView textView = (TextView) view.findViewById(R.id.textView); 
    textView.setText(mediafileinfo.getAlbum()); 

和休息將是相同的 可以設置數組列表中你這樣的適配器

new CustomAdapter(this,songlist) 希望這會幫助你。 For more info

相關問題