1

I have two custom adapter and I want to merge it in one Adapter Adapter carrying name and mac information I had seen lots of question but didnt understand clearly what to do THANKS BEFORE

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;
}
}

MyAdapter2.java

public class MyAdapter2 extends ArrayAdapter<Datapro2> {
public MyAdapter2(Context context, int resource, List<Datapro2> collect1) {
    super(context, resource, collect1);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    TextView textView = new TextView(getContext());
    Datapro2 item = getItem(position);
    textView.setTextColor(Color.BLACK);
    textView.setText(item.Name);
    return textView;
}
}

In this Below java class i am showing data in two different listview i want to show it in one

public class Main2Activity extends AppCompatActivity {
ListView listOfDatabaseObject;
ListView listView;
SQLiteDatabase sqLiteDatabase;
UserDbHelper userDbHelper;
List<DataPro> result;
List<Datapro2> results;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    listOfDatabaseObject = (ListView)findViewById(R.id.listView);
    listView = (ListView)findViewById(R.id.listView2);
    userDbHelper = new UserDbHelper(getApplicationContext());
    sqLiteDatabase =userDbHelper.getReadableDatabase();
    result = userDbHelper.getItemFromDatabase(sqLiteDatabase);
    MyAdapter adapter = new MyAdapter(getApplicationContext(), 0, result);
    listOfDatabaseObject.setAdapter(adapter);
    adapter.notifyDataSetChanged();
    results = userDbHelper.getItemFromDatabase2(sqLiteDatabase);
    MyAdapter2 adapter2 = new MyAdapter2(getApplicationContext(), 0, results);
    listView.setAdapter(adapter2);
    adapter.notifyDataSetChanged();
}
}

DataPro.java

public class DataPro {
String Name;
String Mac;

public DataPro(String Name, String Mac)
{
    this.Name=Name;
    this.Mac=Mac;
}
}

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) {

}
}

1 Answer 1

1

You can use only 1 Adapter, and can use any tag(integer) to manage them differently.

For Ex. :

Take an extra int in DataProWrapper class.

public class{
   public DataPro dataProObject;
   public int type;
}

Ex. public int type = 0; (set 0 for first adapter, set 1 for 2nd adapter)

set in objects (DataProWrapper list), you are sending in Adapter's constructor.

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;
        }
      }
    }
Sign up to request clarification or add additional context in comments.

5 Comments

if i am using one apdater i am getting error while retriving data..like i am retreving only name..getting error like remove second parameter from datapro
you can use another class to add that type integer.like i have edited in my code
get value with DataPro object = collect.get(position).dataProObject;
instead of take type in DataPro, use DataProWrapper
i want to show both table data at same time in one listview

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.