2016-09-25 42 views
1

我有兩個POJO類,即PostFeedSessionFeed如何製作不同類型對象的ArrayList?

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 
} 

我試圖創建一個搜索活動,其從MySqlite數據庫搜索數據。在兩個不同的數據庫中,每個類型有兩個單獨的表,即PostFeedTableSessionFeedTable

在我的數據庫操作類,這就是我要回:

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

這是相同的與各個變量的會話數據庫操作。

SearchActivity包含一個回收站視圖,其適配器採用ArrayList並設置該列表,該列表還包含兩種類型的行元素。

問題:如何創建一個包含這兩種類型的對象,並進一步如何使回收觀點表明,這兩種類型的ArrayList中的對象的ArrayList。

如果你需要更多的澄清讓我知道。提前致謝。

+2

您可以創建一個包含對象a和b的對象c。然後創建一個c的數組列表。 – nikka

+0

聽起來很簡單,你可以請代碼片段幫忙嗎? @nikka –

+0

添加了一個答案,請評論,如果你能夠使用相同或不是 – nikka

回答

4
public class Feeds implements Parcelable{ 

private PostFeed postFeed; 
private SessionFeed sessionFeed; 

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

隨後把數組列表會解決這個問題。

而且

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

重複相同的for循環sessionfeedArraylist爲好。

+0

數據庫操作怎麼樣?如何使用上述訪問存儲的數據。主要是:我從數據庫訪問我的數據。 –

+0

獲取兩個不同的後續傳送和會話傳送的數組列表,然後將它們簡單地放到數據源列表列表中。因此,對於Feed的每個成員,postfeed將爲空,sessionfeed將爲null。 – nikka

+0

@AsifAli更新了我的答案,請檢查。 – nikka

0

您已執行Parcelable interface,因此您可以創建此interface的列表,它可用於存儲implemented class object

ArrayList<Parcelable> pList = new ArrayList<>(); 
+0

您可以請詳細說明代碼片段嗎? –

+0

'pList.add((Parcelable)sessionFeed); pList.add((Parcelable)postFeed);' – user1506104

+0

我明白你剛剛展示的內容,但請仔細閱讀這個問題,我該如何執行數據庫操作並最終獲取我發送到適配器的列表或數組列表。請嘗試分解並詳細說明。 –

1

由於兩者之間似乎並不常見,儘管分享了相似的名稱,但您仍可以創建一個新對象,該對象包含PostFeedSessionFeed

class FeedHolder implements Parcelable { 

    private final List<PostFeed> postFeeds; 
    private final List<SessionFeed> sessionFeeds; 

    FeedHolder(@NonNull List<PostFeed> postFeeds,@NonNull List<SessionFeed> sessionFeeds) { 
     this.postFeeds = postFeeds; 
     this.sessionFeeds = sessionFeeds; 
    } 

    List<SessionFeed> getSessionFeeds() { 
     return sessionFeeds; 
    } 

    List<PostFeed> getPostFeeds() { 
     return postFeeds; 
    } 

    //If you're using this data in an adapter, knowing the total 
    //size of both lists might be helpful. 
    int getTotalFeedCount() { 
     return postFeeds.size() + sessionFeeds.size(); 
    } 

} 

//... 

List<SessionFeed> sessionFeeds = //whatever you do to populate your 
//List of SessionFeeds... 
List<PostFeed> postFeeds = //Same again. 
FeedHolder feedHolder = FeedHolder(postFeeds, sessionFeeds); 
+0

數據庫操作怎麼樣?如何使用上述訪問存儲的數據。主要是:我從數據庫訪問我的數據 –

+0

我已經對這個'FeedHolder'類進行了一些編輯,可能與您的情況更相關。由你決定。 – PPartisan

1

我想尼卡認爲是正確的。完善就可以了,使用下面的類適配器

public class Feed implements Parcelable{ 

    private PostFeed postFeed; 
    private SessionFeed sessionFeed; 

    public Feed(PostFeed feed){ 
     this.postFeed = feed; 
    } 

    public Feed(SessionFeed feed){ 
     this.sessionFeed = feed; 
    } 

    //returns true for session feed type 
    public boolean isSessionFeed(){ 
     return sessionFeed!=null; 
    } 

    public SessionFeed getSessionFeed(){ 
     return sessionFeed; 
    } 

    public PostFeed getPostFeed(){ 
     return postFeed; 
    } 

} 

而在你的數據庫的helper方法,回輸的對象名單。

public List<Feed> readPostForSearch(String searchText, DatabaseOperations dop){ 
    SQLiteDatabase sqLiteDatabase = dop.getReadableDatabase(); 
    List<Feed> newsFeedList = new ArrayList<>(); 
    ... 
    if (cursor != null && cursor.moveToFirst()) { 
     L.m("loading entries " + cursor.getCount() + new Date(System.currentTimeMillis())); 
     do { 
      PostFeed postFeed = new PostFeed(); 

      ... 

      newsFeedList.add(new Feed(postFeed)); 

     } while (cursor.moveToNext()); 
    } 

    return newsFeedList; 
} 

爲sessionFeeds重複相同操作,並將此列表從數據庫添加到適配器列表中。設置視圖時使用isSessionFeed()檢查類型並相應地設置視圖。希望能幫助到你。

+0

如果你真的想幫助我,讓我們來做這個adpater?幫助我爲多個視圖製作適配器。我不能做getItemViewType()。 –

+0

我已經從ArrayList 的數據庫中獲得搜索結果,現在如何在適配器中設置東西 –

相關問題