0

I have a news app in which I am showing all the news in listview using my web services. Now I need to add one category news after every 3 news in home page listview.

I am sharing my code here please guys help me..

My Base Adaptor

public abstract class MyBaseAdapter extends BaseAdapter {
int lastPosition;
private Context context;

public MyBaseAdapter(Context context) {
    this.lastPosition = -1;
    this.context = context;
}

@Override
public final View getView(int position, View view, ViewGroup parent) {
    view = getBaseView(position, view, parent);
    if(position > lastPosition)
        view.startAnimation(AnimationUtils.loadAnimation(this.context, R.anim.up_anim));
    lastPosition = Math.max(lastPosition, position);
    return view;
}

protected abstract View getBaseView(int position, View convertView, ViewGroup parent);
}

News Adaptor

public class NewsAdapter extends MyBaseAdapter {
private LayoutInflater inflater;
private List<News> list;

public NewsAdapter(Context context, List<News> list) {
    super(context);
    this.inflater = LayoutInflater.from(context);
    this.list = list;
}

@Override
public int getCount() {
    return this.list.size();
}

@Override
public News getItem(int position) {
    return this.list.get(position);
}

@Override
public long getItemId(int position) {
    return this.getItem(position).getId();
}

@Override
public View getBaseView(int position, View view, ViewGroup parent) {
    NewsHolder holder;
    if(view==null) {
        view = inflater.inflate(R.layout.item_news, parent, false);
        holder = new NewsHolder();
        holder.txtHeading = (TextView) view.findViewById(R.id.txtHeading);
        holder.txtDate = (TextView) view.findViewById(R.id.txtDate);
        holder.txtLocation = (TextView) view.findViewById(R.id.txtLocation);
        holder.imgNews = (ImageView) view.findViewById(R.id.imgNews);
        holder.imgVideo = view.findViewById(R.id.imgVideo);
        view.setTag(holder);
    } else {
        holder = (NewsHolder) view.getTag();
    }
    News news = getItem(position);
    holder.txtHeading.setText(news.getHeading());
    holder.txtDate.setText(news.getDate());
    //holder.txtLocation.setText(news.getLocation());
    holder.imgVideo.setVisibility(news.isVideo()?View.VISIBLE:View.GONE);
    if(news.isVideo())
        ImageLoader.getInstance().displayImage(news.getVideoThumb(), holder.imgNews, NewsApp.getInstance().getVideoImageOptions());
    else
        ImageLoader.getInstance().displayImage(news.getImages().get(0), holder.imgNews);
    return view;
}

private class NewsHolder {
    private TextView txtHeading;
    private TextView txtDate;
    private TextView txtLocation;
    private ImageView imgNews;
    private View imgVideo;
}
}

Base Fragment

public class ListViewFragment extends BaseFragment {
private String url;
private String title;

public ListViewFragment(String url, String title) {
    this.url = url;
    this.title = title;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.frag_listview);
    NewsListView listView = (NewsListView) findViewById(R.id.listView);
    listView.setUrl(url, title, "Loading...", getActivity());
}
}

News Listview

public class NewsListView extends ListView {
public NewsListView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
}

public NewsListView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public NewsListView(Context context) {
    super(context);
}

public void setUrl(String url, final String title, String loadingMsg, final Activity activity) {
    final ProgressDialog pDialog = new ProgressDialog(getContext());
    pDialog.setMessage(loadingMsg);
    pDialog.setCancelable(false);
    pDialog.setCanceledOnTouchOutside(true);
    pDialog.show();
    new GetJSON(url, new JSONListener() {
        @Override
        public void onJSONReceived(final String json) {
            pDialog.dismiss();
            final ArrayList<News> list = new ArrayList<News>(News.parseList(json));
            if(list!=null && !list.isEmpty()) {
                setAdapter(new NewsAdapter(getContext(), list));
                setOnItemClickListener(new OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent,
                            View view, int position, long id) {
                        Intent intent = new Intent(getContext(), DetailActivity.class);
                        intent.putExtra(DetailActivity.EXTRA_LIST, list);
                        intent.putExtra(DetailActivity.EXTRA_TITLE, title);
                        intent.putExtra(DetailActivity.EXTRA_INDEX , position);
                    //  Toast.makeText(getContext(),"click "+position+" "+title,Toast.LENGTH_LONG).show();
                        activity.startActivity(intent);
                    }
                });
            } else {
                new AlertDialogManager().showAlertDialog(getContext(), title, "No news found", false);
            }
        }

        @Override
        public void onError(String error) {
            pDialog.dismiss();
            new AlertDialogManager().showAlertDialog(getContext(), title, error, false);
        }
    }, null).execute();
}


public void setUrl(String url, Activity activity) {
    setUrl(url, activity.getString(R.string.app_name), "Loading...", activity);
}

public void setUrl(String url, String title, Activity activity) {
    setUrl(url, title, "Getting " + title + " news...", activity);
}

public void setCategory(final SlidingMenu category, final Activity activity) {
    setUrl(Constant.CATEGORY_ITEM_URL + category.getCatId(), category.getTitle(), activity);

}

}
  • bro you can not break listview items once you have stored them in it..you have to design the layout like news texts and category texts and call them in adapter class then after make your logic like if listview position [when it is loading] equals to three then add the category texts or else load the listview like this – brahmy adigopula Sep 03 '16 at 06:06
  • yes i know that but i dont know how to do that. if you have example then just show me once that would be great.. – Dhruv Bhavsar Sep 03 '16 at 06:13
  • 1
    i think there is no example for that kind of requirement bro..you have to implement by your own.but here am attaching link like how to get the position of listview item..http://stackoverflow.com/questions/24811536/android-listview-get-item-view-by-position if you are getting any problem text me here i will also help you bro. – brahmy adigopula Sep 03 '16 at 06:19

0 Answers0