2016-01-06 3 views
0

Я должен показать содержимое 6 разных таблиц разных номеров столбцов через Listview с использованием базового адаптера. Я могу добиться этого, но теперь я также хочу показать заголовок в верхней части ListView, который будет указывать имя столбца, и я хочу сделать это в ListView, то есть я не хочу добавлять какие-либо дополнительные просмотров для нижнего колонтитула, потому что мне пришлось бы создать 6 разных видов для разных заголовков.Как отображать заголовок Listview динамически с использованием базового адаптера?

Извините за длинные коды.

Вот мой класс пользовательского адаптера, в котором только один случай считается

package com.example.bilalrafique.bloodbankmanagementsystem; 

import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 
import java.util.List; 
public class CustomAdapter extends BaseAdapter { 
    Context context; 
    List<ListType> entriesList; 
    boolean header=true; 
public CustomAdapter(Context context,List<ListType> entriesList) { 
    this.context=context; 
    this.entriesList=entriesList; 
} 

@Override 
public int getCount() { 
    return entriesList.size(); 
} 

@Override 
public Object getItem(int position) { 
    return entriesList.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return entriesList.get(position).getId(); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View v=null; 
    if(entriesList.get(position).getTableType().equals("Dnr")){ 
     v=View.inflate(context,R.layout.layout_lv_dnrentry,null); 
     TextView id = (TextView) v.findViewById(R.id.dnrEId); 
     TextView name = (TextView) v.findViewById(R.id.dnrEName); 
     TextView age = (TextView) v.findViewById(R.id.dnrEAge); 
     TextView gender = (TextView) v.findViewById(R.id.dnrEGender); 
     TextView bloodGroup = (TextView) v.findViewById(R.id.dnrEBloodGroup); 
     if(position==0 && header==true){ 
      id.setBackgroundColor(context.getResources().getColor(android.R.color.background_light)); 
      name.setBackgroundColor(context.getResources().getColor(android.R.color.background_light)); 
      age.setBackgroundColor(context.getResources().getColor(android.R.color.background_light)); 
      gender.setBackgroundColor(context.getResources().getColor(android.R.color.background_light)); 
      bloodGroup.setBackgroundColor(context.getResources().getColor(android.R.color.background_light)); 
      header=false; 
     } 
     else { 
      id.setText(String.valueOf(entriesList.get(position).getId())); 
      name.setText(String.valueOf(entriesList.get(position).getName())); 
      age.setText(String.valueOf(entriesList.get(position).getAge())); 
      gender.setText(String.valueOf(entriesList.get(position).getGender())); 
      bloodGroup.setText(String.valueOf(entriesList.get(position).getBloodGroup())); 
     } 
    } 
return v; 
} 
} 

Это DonorView класс

package com.example.bilalrafique.bloodbankmanagementsystem; 

import android.app.Activity; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.widget.ListView; 
import java.util.ArrayList; 
import java.util.List; 
public class DonorView extends Activity { 
List<ListType> entriesList; 
Cursor dCur; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layout_dnr_view); 
    dCur=MainActivity.db.rawQuery("SELECT * FROM Donor",null); 
    entriesList=new ArrayList<>(); 
    ListType.populateList(this,entriesList, dCur,"Donor"); 
    ListView lvDnr=(ListView)findViewById(R.id.lvDnrView); 
    CustomAdapter lvAdapter=new CustomAdapter(this,entriesList); 
    lvDnr.setAdapter(lvAdapter); 
} 
} 

Это layout_dnrview.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical"> 
<ListView 
    android:id="@+id/lvDnrView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    /> 
</LinearLayout> 

И это layout_lv_dnrentry.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal" 
android:id="@+id/lvDnr_linear"> 
<TextView 
    android:layout_width="50dp" 
    android:layout_height="wrap_content" 
    android:text="Id" 
    android:id="@+id/dnrEId" 
    android:textSize="20dp" 
    android:gravity="center_vertical" 
    android:textColor="#000000" 
    android:background="@color/material_deep_teal_500" 
    android:paddingLeft="5dp"/> 
<TextView 
    android:layout_width="235dp" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical" 
    android:text="Name" 
    android:id="@+id/dnrEName" 
    android:background="@color/accent_material_dark" 
    android:textSize="20dp" 
    android:textColor="#000000" 
    android:paddingLeft="40dp"/> 
<TextView 
    android:layout_width="80dp" 
    android:layout_height="wrap_content" 
    android:text="Age" 
    android:gravity="center_vertical" 
    android:id="@+id/dnrEAge" 
    android:textSize="20dp" 
    android:background="@color/accent_material_dark" 
    android:textColor="#000000" 
    android:paddingLeft="10dp"/> 
<TextView 
    android:layout_width="85dp" 
    android:layout_height="wrap_content" 
    android:text="M/F" 
    android:gravity="center_vertical" 
    android:id="@+id/dnrEGender" 
    android:textSize="20dp" 
    android:background="@color/accent_material_dark" 
    android:textColor="#000000" 
    android:paddingLeft="20dp"/> 
<TextView 
    android:layout_width="150dp" 
    android:layout_height="wrap_content" 
    android:text="Bld Grp" 
    android:gravity="center_vertical" 
    android:id="@+id/dnrEBloodGroup" 
    android:textSize="20dp" 
    android:background="@color/accent_material_dark" 
    android:textColor="#000000" 
    android:paddingLeft="20dp"/> 
</LinearLayout> 

Теперь проблема в том, что она пропускает первую строку в таблице базы данных, а вместо этой строки она отображает заголовок, а затем под этим заголовком начинает отображаться 2, 3 и следующие строки. Но я хочу, чтобы он показывал заголовок сверху, а затем начал показывать фактическую таблицу. И снова я не могу создавать разные макеты для разных заголовков. Некоторые из них будут содержать 6 столбцов, некоторые из них будут 4, а некоторые - 3.

ответ

1

Просто нужно добавить метод AddHeader в класс класса Донор.

создал этот метод в виде Донор классе

public View donorHeader(Context c){ 
    View v=View.inflate(c,R.layout.layout_lv_dnrentry,null); 
    TextView id = (TextView) v.findViewById(R.id.dnrEId); 
    TextView name = (TextView) v.findViewById(R.id.dnrEName); 
    TextView age = (TextView) v.findViewById(R.id.dnrEAge); 
    TextView gender = (TextView) v.findViewById(R.id.dnrEGender); 
    TextView bloodGroup = (TextView) v.findViewById(R.id.dnrEBloodGroup); 
    id.setBackgroundColor(c.getResources().getColor(android.R.color.background_light)); 
    name.setBackgroundColor(c.getResources().getColor(android.R.color.background_light)); 
    age.setBackgroundColor(c.getResources().getColor(android.R.color.background_light)); 
    gender.setBackgroundColor(c.getResources().getColor(android.R.color.background_light)); 
    bloodGroup.setBackgroundColor(c.getResources().getColor(android.R.color.background_light)); 
    return v; 
} 

и в методе DonorView OnCreate изменить код `

CustomAdapter lvAdapter=new CustomAdapter(this,entriesList); 
    lvDnr.addHeaderView(donorHeader(this)); 
    lvDnr.setAdapter(lvAdapter); 

Теперь удалите вложенный, если еще в методе GetView пользовательского адаптера ,