2013-07-25 20 views
4

我必須ListView定製適配器同時返回Twitter和Facebook供稿。他們也有自己的XML。直到現在,我單獨向他們展示了Activity,現在我打算將這兩種數據結合起來並顯示在一個適配器中。我聽說有一些概念,如「合併適配器」。有人可以幫我用下面的發佈代碼?如何合併兩個或多個適配器並顯示在Android中的一個ListView中

文件:FacebookAdapter.java

public class FacebookAdapter extends ArrayAdapter<RssFeedStructure> { 
List<RssFeedStructure> imageAndTexts1 = null; 

public FacebookAdapter(Activity activity, 
     List<RssFeedStructure> imageAndTexts) { 
    super(activity, 0, imageAndTexts); 
    imageAndTexts1 = imageAndTexts; 
} 

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

    Activity activity = (Activity) getContext(); 
    LayoutInflater inflater = activity.getLayoutInflater(); 

    View rowView = inflater.inflate(R.layout.facebookadapter, null); 
    TextView textView = (TextView) rowView.findViewById(R.id.feed_text); 
    TextView timeFeedText = (TextView) rowView 
      .findViewById(R.id.feed_updatetime); 
    ImageView imageView = (ImageView) rowView.findViewById(R.id.feed_image); 
    try { 

     Log.d("rssfeed", "imageAndTexts1.get(position).getImgLink() :: " 
       + imageAndTexts1.get(position).getImgLink() + " :: " 
       + imageAndTexts1.get(position).getTitle()); 
     textView.setText(imageAndTexts1.get(position).getDescription()); 
     SpannableString content = new SpannableString(imageAndTexts1.get(
       position).getPubDate()); 
     content.setSpan(new UnderlineSpan(), 0, 13, 0); 

     timeFeedText.setText(content); 
     if (imageAndTexts1.get(position).getImgLink() != null) { 

      URL feedImage = new URL(imageAndTexts1.get(position) 
        .getImgLink().toString()); 
      if (!feedImage.toString().equalsIgnoreCase("null")) { 
       HttpURLConnection conn = (HttpURLConnection) feedImage 
         .openConnection(); 
       InputStream is = conn.getInputStream(); 
       Bitmap img = BitmapFactory.decodeStream(is); 
       imageView.setImageBitmap(img); 
      } else { 
       imageView.setBackgroundResource(R.drawable.rss_tab_tweets); 
      } 
     } 

    } catch (MalformedURLException e) { 

    } catch (IOException e) { 

    } 

    return rowView; 

} 
} 

文件:FacebookActivity.java

public class FacebookFeeds extends Activity { 

/** Called when the activity is first created. */ 

ListView _rssFeedListView; 
List<JSONObject> jobs; 
List<RssFeedStructure> rssStr; 
private FacebookAdapter _adapter; 
String sorti = ""; 
String mode = ""; 
//Button sort_Btn; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.listview); 
    _rssFeedListView = (ListView) findViewById(R.id.rssfeed_listview); 
    RssFeedTask rssTask = new RssFeedTask(); 
    rssTask.execute(); 
} 

private class RssFeedTask extends AsyncTask<String, Void, String> { 
    // private String Content; 
    private ProgressDialog Dialog; 
    String response = ""; 

    @Override 
    protected void onPreExecute() { 
     Dialog = new ProgressDialog(FacebookFeeds.this); 
     Dialog.setMessage("Rss Loading..."); 
     Dialog.show(); 

    } 

    @Override 
    protected String doInBackground(String... urls) { 
     try { 
      String feed = "https://someurl"; 
      XmlHandler rh = new XmlHandler(); 
      rssStr = rh.getLatestArticles(feed); 
     } catch (Exception e) { 
     } 
     return response; 

    } 

    @Override 
    protected void onPostExecute(String result) { 
     if (rssStr != null) { 
      _adapter = new FacebookAdapter(FacebookFeeds.this, rssStr); 
      _rssFeedListView.setAdapter(_adapter); 
     } 
     Dialog.dismiss(); 
    } 
} 

} 

文件:TwitterAdapter.java

public class TwitterAdapter extends ArrayAdapter<RssFeedStructure> { 
List<RssFeedStructure> imageAndTexts1 = null; 

public TwitterAdapter(Activity activity, 
     List<RssFeedStructure> imageAndTexts) { 
    super(activity, 0, imageAndTexts); 
    imageAndTexts1 = imageAndTexts; 
} 

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

    Activity activity = (Activity) getContext(); 
    LayoutInflater inflater = activity.getLayoutInflater(); 

    View rowView = inflater.inflate(R.layout.twitteradapter, null); 
    TextView textView = (TextView) rowView.findViewById(R.id.feed_text); 
    TextView timeFeedText = (TextView) rowView 
      .findViewById(R.id.feed_updatetime); 
    ImageView imageView = (ImageView) rowView.findViewById(R.id.feed_image); 
    try { 

     Log.d("rssfeed", "imageAndTexts1.get(position).getImgLink() :: " 
       + imageAndTexts1.get(position).getImgLink() + " :: " 
       + imageAndTexts1.get(position).getTitle()); 
     textView.setText(imageAndTexts1.get(position).getTitle()); 
     SpannableString content = new SpannableString(imageAndTexts1.get(
       position).getPubDate()); 
     content.setSpan(new UnderlineSpan(), 0, 13, 0); 

     timeFeedText.setText(content); 
     if (imageAndTexts1.get(position).getImgLink() != null) { 

      URL feedImage = new URL(imageAndTexts1.get(position) 
        .getImgLink().toString()); 
      if (!feedImage.toString().equalsIgnoreCase("null")) { 
       HttpURLConnection conn = (HttpURLConnection) feedImage 
         .openConnection(); 
       InputStream is = conn.getInputStream(); 
       Bitmap img = BitmapFactory.decodeStream(is); 
       imageView.setImageBitmap(img); 
      } else { 
       imageView.setBackgroundResource(R.drawable.rss_tab_tweets); 
      } 
     } 

    } catch (MalformedURLException e) { 

    } catch (IOException e) { 

    } 

    return rowView; 

} 
} 

文件:TwitterActivity.java

public class TwitterFeeds extends Activity { 

/** Called when the activity is first created. */ 

ListView _rssFeedListView; 
List<JSONObject> jobs; 
List<RssFeedStructure> rssStr; 
private TwitterAdapter _adapter; 
String sorti = ""; 
String mode = ""; 
//Button sort_Btn; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.listview); 
    _rssFeedListView = (ListView) findViewById(R.id.rssfeed_listview); 
    RssFeedTask rssTask = new RssFeedTask(); 
    rssTask.execute(); 
} 

private class RssFeedTask extends AsyncTask<String, Void, String> { 
    // private String Content; 
    private ProgressDialog Dialog; 
    String response = ""; 

    @Override 
    protected void onPreExecute() { 
     Dialog = new ProgressDialog(TwitterFeeds.this); 
     Dialog.setMessage("Rss Loading..."); 
     Dialog.show(); 

    } 

    @Override 
    protected String doInBackground(String... urls) { 
     try { 
      String feed = "https://someurl"; 
      XmlHandler rh = new XmlHandler(); 
      rssStr = rh.getLatestArticles(feed); 
     } catch (Exception e) { 
     } 
     return response; 

    } 

    @Override 
    protected void onPostExecute(String result) { 
     if (rssStr != null) { 
      _adapter = new TwitterAdapter(TwitterFeeds.this, 
        rssStr); 
      _rssFeedListView.setAdapter(_adapter); 
     } 
     Dialog.dismiss(); 
    } 
} 

} 

回答

0

創建一個新的適配器類似FacebookTwitterAdapter,題幹兩個適配器爲構造函數的參數。

  • getViewTypeCount - 返回2(無論是Facebook或Twitter視圖)
  • getItemViewType - 對於Facebook查看Twitter的觀點,則返回0和1
  • getView - 返回無論是Facebook或Twitter查看這取決於你怎麼想通過時間表顯示觀點?
+1

jfs:你能舉個例子嗎? – user2568219

0

最簡單的方法可能是創建項目的一個巨大的數組列表,並填充它在一個單一的列表視圖,也許你可以在兩者之間在ListView分配分節符,也許你可以設計自定義佈局區分Facebook和Twitter佈局。或者你可以在「github」中使用「commonsware」的「mergeadapter」。

相關問題