在android中的动态列表视图之间添加动态项

时间:2016-09-03 05:36:28

标签: android listview android-studio

我有一个新闻应用,我使用我的网络服务在listview中显示所有新闻。 现在我需要在主页listview中每3个新闻后添加一个类别新闻。

我在这里分享我的代码请大家帮帮我..

我的基本适配器

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

新闻适配器

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

基本片段

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

新闻列表视图

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

}

}

0 个答案:

没有答案
相关问题