Android 如何将两个ArrayAdapter合并为一个并在一个listview中显示

Android 如何将两个ArrayAdapter合并为一个并在一个listview中显示,android,Android,我有两个自定义适配器,我想将其合并到一个适配器中 承载名称和mac信息的适配器 我看到了很多问题,但不清楚该怎么办 谢谢你 MyAdapter.java public class MyAdapter extends ArrayAdapter<DataPro> { public MyAdapter(Context context, int resource, List<DataPro> collect) { super(context, resource, col

我有两个自定义适配器,我想将其合并到一个适配器中 承载名称和mac信息的适配器 我看到了很多问题,但不清楚该怎么办 谢谢你

MyAdapter.java

public class MyAdapter extends ArrayAdapter<DataPro> {

public MyAdapter(Context context, int resource, List<DataPro> collect) {
    super(context, resource, collect);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    TextView textView = new TextView(getContext());
    DataPro item = getItem(position);
    textView.setTextColor(Color.BLACK);
    textView.setText(item.Name+" : "+item.Mac);
    return textView;
}
}
Datapro2.java

public class Datapro2 {
String Name;

public Datapro2(String Name)
{
    this.Name=Name;
}
}
DataBaseclass.java

public class UserDbHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "STUDENTINFO.DB";
public static final int DB_VERSION = 1;
String query = "SELECT * FROM " +MainActivity.collect+ " where " +Coloumn.NewInfo.MAC+ " in(select "+Coloumn.NewInfo.MAC+ " FROM " +MainActivity.collect2+");";
String query2 =  "SELECT " + Coloumn.NewInfo.NAME + " FROM " +MainActivity.collect+ " where " +Coloumn.NewInfo.MAC+ " not in(select "+Coloumn.NewInfo.MAC+ " FROM " +MainActivity.collect2+");";

 public UserDbHelper(Context context)
 {
     super(context,DB_NAME,null,DB_VERSION);
 }
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
}
public void AddInformation(String name,String mac,SQLiteDatabase sqLiteDatabase)
{
    ContentValues contentValues = new ContentValues();
    contentValues.put(Coloumn.NewInfo.NAME,name);
    contentValues.put(Coloumn.NewInfo.MAC,mac);
    sqLiteDatabase.insert(MainActivity.collect,null,contentValues);
}
public void AddInformation2(String name,String mac,SQLiteDatabase sqLiteDatabase)
{
    ContentValues contentValues = new ContentValues();
    contentValues.put(Coloumn.NewInfo.NAME,name);
    contentValues.put(Coloumn.NewInfo.MAC,mac);
    sqLiteDatabase.insert(MainActivity.collect2,null,contentValues);
}
public List<DataPro> getItemFromDatabase(SQLiteDatabase sqLiteDatabase) {
    List<DataPro> result = new ArrayList<>();
    Cursor c = sqLiteDatabase.rawQuery(query,null);

    while (c.moveToNext()) {
        result.add(
                new DataPro(
                        c.getString(c.getColumnIndex("name")),
                        c.getString(c.getColumnIndex("mac"))
                )
        );
    }
    c.close();
    return result;
}

public List<Datapro2> getItemFromDatabase2(SQLiteDatabase sqLiteDatabase) {
    List<Datapro2> result = new ArrayList<>();
    Cursor c = sqLiteDatabase.rawQuery(query2,null);

    while (c.moveToNext()) {
        result.add(
                new Datapro2(
                        c.getString(c.getColumnIndex("name"))

                )
        );
    }
    c.close();
    return result;
}




@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

}
}
public类UserDbHelper扩展了SQLiteOpenHelper{
公共静态最终字符串DB_NAME=“STUDENTINFO.DB”;
公共静态最终int DB_版本=1;
String query=“从“+MainActivity.collect+”中选择*,其中“+Coloumn.NewInfo.MAC+”(从“+MainActivity.collect2+”中选择“+Coloumn.NewInfo.MAC+”;”;
String query2=“从“+MainActivity.collect+”中选择“+Coloumn.NewInfo.NAME+”,其中“+Coloumn.NewInfo.MAC+”不在其中(从“+MainActivity.collect2+”中选择“+Coloumn.NewInfo.MAC+”;
公共UserDbHelper(上下文)
{
super(上下文,数据库名称,空,数据库版本);
}
@凌驾
public void onCreate(SQLiteDatabase SQLiteDatabase){
}
公共无效添加信息(字符串名称、字符串mac、SQLiteDatabase SQLiteDatabase)
{
ContentValues ContentValues=新ContentValues();
contentValues.put(column.NewInfo.NAME,NAME);
contentValues.put(column.NewInfo.MAC,MAC);
sqLiteDatabase.insert(MainActivity.collect,null,contentValues);
}
public void AddInformation2(字符串名称、字符串mac、SQLiteDatabase SQLiteDatabase)
{
ContentValues ContentValues=新ContentValues();
contentValues.put(column.NewInfo.NAME,NAME);
contentValues.put(column.NewInfo.MAC,MAC);
insert(MainActivity.collect2,null,contentValues);
}
公共列表getItemFromDatabase(SQLiteDatabase SQLiteDatabase){
列表结果=新建ArrayList();
游标c=sqLiteDatabase.rawQuery(query,null);
while(c.moveToNext()){
result.add(
新DataPro(
c、 getString(c.getColumnIndex(“名称”)),
c、 getString(c.getColumnIndex(“mac”))
)
);
}
c、 close();
返回结果;
}
公共列表getItemFromDatabase2(SQLiteDatabase SQLiteDatabase){
列表结果=新建ArrayList();
游标c=sqLiteDatabase.rawQuery(query2,null);
while(c.moveToNext()){
结果.add(
新Datapro2(
c、 getString(c.getColumnIndex(“名称”))
)
);
}
c、 close();
返回结果;
}
@凌驾
public void onUpgrade(SQLiteDatabase SQLiteDatabase,inti,inti1){
}
}

您只能使用一个适配器,并且可以使用任何标记(整数)以不同方式管理它们

例如:

在DataProWrapper类中获取一个额外的int

public class{
   public DataPro dataProObject;
   public int type;
}
例如,
public int type=0(第一个适配器设置为0,第二个适配器设置为1)

在对象(DataProWrapper列表)中设置,您将在适配器的构造函数中发送

公共类MyAdapter扩展了ArrayAdapter{
公共MyAdapter(上下文、int资源、列表集合){
超级(上下文、资源、收集);
//保存以在getView()方法中使用
收集;收集;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//获取类型值
DataPro对象=collect.get(position).dataProObject;
if(object.type==0){
//第一适配器
TextView TextView=newtextView(getContext());
DataPro item=getItem(位置);
textView.setTextColor(Color.BLACK);
textView.setText(item.Name+“:”+item.Mac);
返回文本视图;
}否则{
//第二适配器
TextView TextView=newtextView(getContext());
Datapro2 item=getItem(位置);
textView.setTextColor(Color.BLACK);
textView.setText(item.Name);
返回文本视图;
}
}
}

如果我使用一个apdater,我在检索数据时会出错..就像我只检索名称..像从DataPro中删除第二个参数一样出错您可以使用另一个类添加该类型的整数。就像我在我的codeget值中使用DataPro object=collect.get(position).dataProObject;使用DataProWrapper而不是DataPro中的take类型我希望在一个listview中同时显示两个表数据
public class Datapro2 {
String Name;

public Datapro2(String Name)
{
    this.Name=Name;
}
}
public class UserDbHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "STUDENTINFO.DB";
public static final int DB_VERSION = 1;
String query = "SELECT * FROM " +MainActivity.collect+ " where " +Coloumn.NewInfo.MAC+ " in(select "+Coloumn.NewInfo.MAC+ " FROM " +MainActivity.collect2+");";
String query2 =  "SELECT " + Coloumn.NewInfo.NAME + " FROM " +MainActivity.collect+ " where " +Coloumn.NewInfo.MAC+ " not in(select "+Coloumn.NewInfo.MAC+ " FROM " +MainActivity.collect2+");";

 public UserDbHelper(Context context)
 {
     super(context,DB_NAME,null,DB_VERSION);
 }
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
}
public void AddInformation(String name,String mac,SQLiteDatabase sqLiteDatabase)
{
    ContentValues contentValues = new ContentValues();
    contentValues.put(Coloumn.NewInfo.NAME,name);
    contentValues.put(Coloumn.NewInfo.MAC,mac);
    sqLiteDatabase.insert(MainActivity.collect,null,contentValues);
}
public void AddInformation2(String name,String mac,SQLiteDatabase sqLiteDatabase)
{
    ContentValues contentValues = new ContentValues();
    contentValues.put(Coloumn.NewInfo.NAME,name);
    contentValues.put(Coloumn.NewInfo.MAC,mac);
    sqLiteDatabase.insert(MainActivity.collect2,null,contentValues);
}
public List<DataPro> getItemFromDatabase(SQLiteDatabase sqLiteDatabase) {
    List<DataPro> result = new ArrayList<>();
    Cursor c = sqLiteDatabase.rawQuery(query,null);

    while (c.moveToNext()) {
        result.add(
                new DataPro(
                        c.getString(c.getColumnIndex("name")),
                        c.getString(c.getColumnIndex("mac"))
                )
        );
    }
    c.close();
    return result;
}

public List<Datapro2> getItemFromDatabase2(SQLiteDatabase sqLiteDatabase) {
    List<Datapro2> result = new ArrayList<>();
    Cursor c = sqLiteDatabase.rawQuery(query2,null);

    while (c.moveToNext()) {
        result.add(
                new Datapro2(
                        c.getString(c.getColumnIndex("name"))

                )
        );
    }
    c.close();
    return result;
}




@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

}
}
public class{
   public DataPro dataProObject;
   public int type;
}
public class MyAdapter extends ArrayAdapter<DataPro> {

    public MyAdapter(Context context, int resource, List<DataProWrapper> collect) {
        super(context, resource, collect);
        // save to use in getView() method
        this.collect = collect;
    }

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

        // get type value
        DataPro object = collect.get(position).dataProObject;
        if(object.type == 0){
             // first adapter
             TextView textView = new TextView(getContext());
             DataPro item = getItem(position);
             textView.setTextColor(Color.BLACK);
             textView.setText(item.Name+" : "+item.Mac);
             return textView;
        }else{
             //Second adapter
             TextView textView = new TextView(getContext());
             Datapro2 item = getItem(position);
             textView.setTextColor(Color.BLACK);
             textView.setText(item.Name);
             return textView;
        }
      }
    }