Я должен показать содержимое 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.