我有一个新闻应用,我使用我的网络服务在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);
}
}