在ListView中显示多个数据

时间:2014-09-04 07:01:42

标签: android listview android-listview

我是android新手。我想将Database的数据显示为ListView

现在我只能显示一个数据。 如何将多个数据显示为自定义ListView

这是 MainActivity.class

    DatabaseHandler db = new DatabaseHandler(this);

    /**
     * CRUD Operations
     * */
    Log.d("Reading: ", "Reading all contacts.."); 
    List <AllItem> allItems = new ArrayList<AllItem>();

    allItems = db.getAllAccommodations();

    ArrayList <String> allItems2 = new ArrayList<String>();

    for (AllItem cn : allItems) {
        allItems2.add(cn.getItem_name());
        allItems2.add(cn.getAreaNAme());

    }

    ArrayAdapter <String>  adapter = new ArrayAdapter <String> (this, android.R.layout.simple_list_item_1,allItems2);
    listview.setAdapter(adapter);

我有自己的自定义ListView就像这样

Acco.xml

    <ListView
        android:id="@+id/listAccommodation"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="8"
        android:layout_marginLeft="7dip"
        android:layout_marginRight="7dip"
        android:background="@color/white"
        android:divider="@color/black90"
        android:dividerHeight="5.0sp"
        android:listSelector="@color/black30" >

    </ListView>

AccoLayout.xml

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingLeft="10dip"
    android:paddingTop="10dip"
    android:paddingBottom="10dip" >

    <TextView
        android:id="@+id/item_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/area_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:layout_below="@+id/item_name" />
</RelativeLayout>

有没有人可以帮我这个?

3 个答案:

答案 0 :(得分:1)

您需要为此创建CustomAdapter类 按原样使用listview。

<ListView
    android:id="@+id/listAccommodation"
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_weight="8"
    android:layout_marginLeft="7dip"
    android:layout_marginRight="7dip"
    android:background="@color/white"
    android:divider="@color/black90"
    android:dividerHeight="5.0sp"
    android:listSelector="@color/black30" >

</ListView>  

还有你的自定义Listview。

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dip"
android:paddingTop="10dip"
android:paddingBottom="10dip" >

<TextView
    android:id="@+id/item_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="16sp"
    android:textStyle="bold" />

<TextView
    android:id="@+id/area_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="14sp"
    android:layout_below="@+id/item_name" />
</RelativeLayout>   

创建自定义适配器类并将数据传递给此类。

adapter = new ListAdapter(this, allItems2);
adapter.notifyDataSetChanged();
listview.setAdapter(adapter);   

这是CustomAdapter类。

public class ListAdapter extends BaseAdapter {



public ListAdapter(Activity a, List <AllItem> allItems) {
    activity = a;
    data = d;
    inflater = (LayoutInflater) activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public int getCount() {
    return data.size();
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;      
        if (convertView == null)
            vi = inflater.inflate(R.layout.AccoLayout, null);
  TextView itemName = (TextView)vi.findviewById(R.id.item_name);
  TextView areaName = (TextView)vi.findviewById(R.id.area_name);
        // Set your data here
  itenName.setText(data.get(position));//like this
    return vi;
}   

}

答案 1 :(得分:0)

将此视为您的Cursor:从DB

获取后
Cursor mCur = db.getAllAccommodations(); 
在onCreate中

CurAdapter Cur = new CurAdapter(getActivity(), mCur,0); 
    final ListView lv = (ListView)findViewById(R.id.listAccommodation); 
    lv.setFastScrollEnabled(true);
    lv.setAdapter(Cur);

然后创建一个子类:

private class CurAdapter extends CursorAdapter{


        public CurAdapter(Context context, Cursor c, int flags) {

            super(context, c, flags);


        }


        @Override
        public void bindView(View view, Context context, Cursor cursor) {

            TextView tv = (TextView) view.findViewById(R.id.item_name);
            TextView tv1 = (TextView) view.findViewById(R.id.area_name);




            String item = (cursor.getString(cursor.getColumnIndexOrThrow("ColumnName1")));

            String area = dateConvert(cursor.getString(cursor.getColumnIndexOrThrow("ColumnName2")));



            tv1.setText(item);
            tv.setText(area);

        } 
        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {

            View view = LayoutInflater.from(context).inflate(R.layout.AccoLayout, null);

            return view;

        }

    }

R.layout.AccoLayout是你的&#34; listview行&#34;布局,例如:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="10dip"
    android:paddingLeft="10dip"
    android:paddingTop="10dip" >

    <TextView
        android:id="@+id/item_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/area_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/item_name"
        android:textSize="14sp" />
</RelativeLayout>

答案 2 :(得分:0)

我假设你的allItems2列表有一个模式,如itemName0,areaName0,itemName1,areaName1,itemName2 ..等等。然后,你可以像这样写一个自定义适配器。

public class CustomAdapter extends ArrayAdapter<String> {

private final Activity context;
private final List<String> items;

public CustomAdapter (Activity context, List<String> items) {


    super(context, R.layout.AccoLayout, items);
    this.context = context;
    this.items= items;

}

@Override
public View getView(final int position, View view, ViewGroup parent) {

    LayoutInflater inflater = context.getLayoutInflater();
    View rowView = inflater.inflate(R.layout.AccoLayout, null, true);

    TextView itemName = (TextView) rowView.findViewById(R.id.item_name);
    TextView areaName= (TextView) rowView.findViewById(R.id.area_name);


    itemName.setText(items.get(2*position));
    areaName.setText(items.get(2*position + 1));

    return rowView;
}

}

然后从您的主要活动中调用它;

CustopAdapter adapter = new CustomAdapter (MainActivity.this, allItems2);
listview.setAdapter(adapter);

此外,根据Android的惯例,尽量不要在XML文件名中使用大写字母来防止任何复杂化。您可以更改为acco_layout.xml。