Asif Ali Asif Ali - 2 months ago 15
Android Question

How to make ArrayList of different types of objects?

I have two pojo classes, viz

PostFeed
and
SessionFeed


PostFeed.class

public class PostFeed implements Parcelable{

private int pid;
private int uid;
private String link;
private String title;
private String description;
private int up;
private int comment_count;
private String postPicUrl;
private Date dop;
private String user_name;
private String user_pic;
private String user_status;
private DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//getters and setters
}


SessionFeed.class

public class SessionFeed implements Parcelable{
private String session_title;
private String session_image;
private String session_description;
private int session_id;
private String s_venue;
private String s_coordinator;
private String s_c_email;
private String s_c_phone;
private String resource_person;
private String rp_desg;
private String time_and_date;
private String address;
private String room;
private DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
private Date Dosp;
String user_name;
int uid;
String user_status;
String user_pic;
// getters and setters
}


I'm trying to create a search activity which searches the data from MySqlite database. There are two separate tables for each Types i.e.
PostFeedTable
and
SessionFeedTable
in two different Databases.

Inside my database operations class, this is what I'm returning:

public ArrayList<PostFeed> readPostForSearch(String searchText, DatabaseOperations dop){
SQLiteDatabase sqLiteDatabase = dop.getReadableDatabase();
ArrayList<PostFeed> newsFeedList = new ArrayList<>();
String query ="select * from " + html_test_const.getTable_name() + " where " + html_test_const.getTitle() +" LIKE '%"+searchText+"%' OR "+ html_test_const.getDescription() + " LIKE '%"+searchText+"%'"+" order by date desc " +";";
Cursor cursor = sqLiteDatabase.rawQuery(query,null);
if (cursor != null && cursor.moveToFirst()) {
L.m("loading entries " + cursor.getCount() + new Date(System.currentTimeMillis()));
do {

//create a new object and retrieve the data from the cursor to be stored in this object
PostFeed postFeed = new PostFeed();
postFeed.setTitle(cursor.getString(cursor.getColumnIndex(html_test_const.getTitle())));
postFeed.setLink(cursor.getString(cursor.getColumnIndex(html_test_const.getLink())));
postFeed.setDescription(cursor.getString(cursor.getColumnIndex(html_test_const.getDescription())));
long dateOfPost = cursor.getLong(cursor.getColumnIndex(html_test_const.getDate()));
postFeed.setDop(new java.sql.Date(dateOfPost));
postFeed.setUser_name(cursor.getString(cursor.getColumnIndex(html_test_const.getUser_name())));
postFeed.setPid(cursor.getInt(cursor.getColumnIndex(html_test_const.getSr_key())));
postFeed.setUp(cursor.getInt(cursor.getColumnIndex(html_test_const.getUp_down())));
postFeed.setComment_count(cursor.getInt(cursor.getColumnIndex(html_test_const.getComment_count())));
postFeed.setUid(cursor.getInt(cursor.getColumnIndex(html_test_const.getUid())));
postFeed.setPostPicUrl(cursor.getString(cursor.getColumnIndex(html_test_const.getPost_pic())));
postFeed.setUser_pic(cursor.getString(cursor.getColumnIndex(html_test_const.getUser_pic())));
postFeed.setUser_status(cursor.getString(cursor.getColumnIndex(html_test_const.getUser_status())));
newsFeedList.add(postFeed);

} while (cursor.moveToNext());
}

return newsFeedList;
}


This is same for session database operations with respective variables.


SearchActivity contains a recycler view whose adapter takes an
ArrayList
and set that list, which further would contain two types of row elements.


Question: How to create an arraylist which contains these two types of Objects and further how to make recycler view show these two types of objects from the arraylist.

If you need more clarification let me know. Thanks in advance.

Answer
public class Feeds implements Parcelable{

private PostFeed postFeed;
private SessionFeed sessionFeed;

Public Feeds(PostFeed postfeed, SessionFeed sessionfeed){
this.postFeed = postfeed
this.sessionFeed = sessionfeed
}
}

And then array list of Feeds will solve the problem.

And

for(int i=0: i<postfeedArraylist.size; i ++)
    feedsArraylist.add( new Feeds(postfeedArraylist.get(i), null);

Repeat same for loop for sessionfeedArraylist as well.

Comments