4

I have to ListView custom adapters returning both Twitter and Facebook feeds. Also they do have their own XML. Till now I was showing them in separate Activity, now I am planning to combine both data and show in one adapter. I heard there is some concept like "Merge Adapters". Can someone help me with below posted code ?

File : 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;

}
}

File : 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();
    }
}

}

File : 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;

}
}

File : 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();
    }
}

}
TN888
  • 7,659
  • 9
  • 48
  • 84
user2568219
  • 95
  • 3
  • 11

3 Answers3

1

Maybe this MergeAdapter can help you : https://github.com/commonsguy/cwac-merge

David N
  • 509
  • 4
  • 12
0

Make a new adapter something like FacebookTwitterAdapter, probably taking both adapters as constructor parameters.

  • getViewTypeCount - Return 2 (either facebook or twitter view)
  • getItemViewType - Return 0 for facebook view and 1 for twitter view
  • getView - Return either the facebook or twitter view depending on how you want to display the views maybe by timeline?
jfs
  • 16,758
  • 13
  • 62
  • 88
0

The easiest option might be to create one giant arraylist of items, and populating it over a single listview, maybe you could assign section breaks in between in the listview and maybe you can design custom layouts to differentiate facebook and twitter layouts. OR you can use "mergeadapter" by "commonsware" in "github".

Bijay Koirala
  • 525
  • 5
  • 9