2017-04-12 69 views
0

我有簡單的項目與sqlite(發送和retrive信息3列)。它運作良好。其實我試圖把這些信息給ListView的3列適配器 - >它看起來像這樣: enter image description hereAndroid的Sqlite和多列問題

但是當我運行我的應用程序,我的適配器重複同樣的三倍,後下一欄這一點,一步進行一樣。 enter image description here

什麼即時試圖做的是填補列NR 1 textView2信息,textView3從列NR 2 ...

這對於建立ArrayList和呼籲ListView和適配器代碼:

private void populateListView() { 
    Cursor data = mDatabaseHelper.getData(); 
    ArrayList<String> listData = new ArrayList<>(); 
    while (data.moveToNext()) { 
     listData.add(data.getString(1)); 
     listData.add(data.getString(2)); 
     listData.add(data.getString(3)); 
    } 

    ListDataAdapter adapter = new ListDataAdapter(this, R.layout.adapter_view_layout, listData); 
    mListView.setAdapter(adapter); 

和適配器:

import android.content.Context; 
import android.support.annotation.LayoutRes; 
import android.support.annotation.NonNull; 
import android.support.annotation.Nullable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

import java.util.ArrayList; 



class ListDataAdapter extends ArrayAdapter<String> { 

private static final String TAG = "ListDataAdapter"; 
    private Context mContext; 
    int mResource; 

    public ListDataAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull ArrayList<String> objects) { 
     super(context, resource, objects); 
     mContext = context; 
     mResource = resource; 
    } 

    @NonNull 
    @Override 
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
     String name = getItem(position).toString(); 
     String sex = getItem(position).toString(); 
     String date = getItem(position).toString(); 


     LayoutInflater inflater = LayoutInflater.from(mContext); 
     convertView = inflater.inflate(mResource,parent, false); 


     TextView tvName = (TextView) convertView.findViewById(R.id.textView1); 
     TextView tvSex = (TextView) convertView.findViewById(R.id.textView2); 
     TextView tvDate = (TextView) convertView.findViewById(R.id.textView3); 

     tvName.setText(name); 
     tvDate.setText(date); 
     tvSex.setText(sex); 

     return convertView; 
    } 
} 

如何解決這個問題呢?

回答

1

那麼,您在三個TextView s上設置了相同的String,因此這是預期的。 因此,要達到您的願望,您必須創建一個包含這3列的新類。我們將其命名爲RowModel。因此,您不需要與String一起工作,而是與您的新班級一起工作。事情是這樣的:

private void populateListView() { 
    Cursor data = mDatabaseHelper.getData(); 
    ArrayList<RowModel> listData = new ArrayList<>(); 
    while (data.moveToNext()) { 
     listData.add(new RowModel(data.getString(1), data.getString(2), data.getString(3)); 
    } 

    ListDataAdapter adapter = new ListDataAdapter(this, R.layout.adapter_view_layout, listData); 
    mListView.setAdapter(adapter); 
} 

然後適配器會是這樣的:

class ListDataAdapter extends ArrayAdapter<RowModel> { 

    @NonNull 
    @Override 
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
     RowModel model = getItem(position); 
     String name = model.getName(); 
     String sex = model.getSex(); 
     String date = model.getDate(); 

     // populate TextViews 
    } 
} 
+0

愛德華什麼建議「Rowmodel」類應該怎麼樣子? – bakusek

+0

它可以是一個簡單的3個字段的POJO。 –

+0

是的,它解決了我的問題,非常感謝你 – bakusek