图片轮播
定义图片集合
/**
* 图片集合
*/
private int[] mPics = {R.mipmap.tologin_banner1, R.mipmap.tologin_banner2,
R.mipmap.tologin_banner3, R.mipmap.tologin_banner4, R.mipmap.tologin_banner6};
private int prePosition = 0; //定义前一个点
@Override
protected void initialListener() {
mTagVp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
/**
* 点的状态监听
* @param position
*/
@Override
public void onPageSelected(int position) {
// 当前的点选中
mTagVp.getChildAt(position % mPics.length).setSelected(true);
// 上一个点不选中
mTagVp.getChildAt(prePosition % mPics.length).setSelected(false);
// 记录上个点
prePosition = position % mPics.length;
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
初始化指示器
private void inVpIndicator() {
//初始化存放图片的集合
mImageViews = new ArrayList<>();
for (int i = 0; i < mPics.length; i++) {
//创建imageview
ImageView imageView = new ImageView(getContext());
imageView.setBackgroundResource(mPics[i]);
//添加进集合
mImageViews.add(imageView);
//创建指示器
View indiatorView = new View(getContext());
//设置宽高
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(30, 4);
if (i == 0) {
indiatorView.setSelected(true);
indiatorView.setBackgroundResource(R.drawable.indicator_bg_select);
} else {
indiatorView.setSelected(false);
indiatorView.setBackgroundResource(R.drawable.indicator_bg_select);
}
//添加到容器中
mTagVp.addView(indiatorView, params);
}
mPicAdapter = new PicPagerAdapter();
mTagVp.setAdapter(mPicAdapter);
//设置为中间的为第一个item
int currentItem = Integer.MAX_VALUE / 2 - (Integer.MAX_VALUE / 2) % mPics.length;
mTagVp.setCurrentItem(currentItem);
}
设置自动轮播
private android.os.Handler mHandler = new android.os.Handler(){
@Override
public void handleMessage(Message msg) {
mTagVp.setCurrentItem(mTagVp.getCurrentItem() + 1);
mHandler.sendEmptyMessageDelayed(0,3000);
}
};
/**
* 开始轮播
*/
private void startAutoRound(){
mHandler.sendEmptyMessageDelayed(0,3500);
}
/**
* 停止轮播
*/
private void stopAutoRound(){
mHandler.removeMessages(0);
}
@Override
public void onResume() {
super.onResume();
startAutoRound();
}
@Override
public void onPause() {
super.onPause();
stopAutoRound();
}
@Override
public void onDetach() {
super.onDetach();
stopAutoRound();
}
图片适配器
private class PicPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
//取出imageview
ImageView imageView = mImageViews.get(position % mPics.length);
//添加到容器
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mImageViews.get(position % mPics.length));
}
}
标题ListView
直接上代码吧·······
/**
*
* //
*
* 标题List部分
*
*/
private void getTopicData() {
//获取标题数据
HttpTopic.getTopic("", UrlData.URL_GET_TOPIC_LISTHOT,mCallBack);
HttpTopic.getTopic("", UrlData.URL_GET_TOPIC_LISTNEW,mNewCallBack);
}
private List<TopicInfo> mTopicList;
private MatchCallBack<List<TopicItem>> mNewCallBack = new MatchCallBack<List<TopicItem>>() {
@Override
public void success(List<TopicItem> listEntities) {
/*if(mRefreshLayout != null){
mRefreshLayout.endRefreshing();
}*/
//添加数据到新的集合
TopicInfo info = new TopicInfo("第一个大标题内容");
//把子标签的集合放进来
info.addAllItem(listEntities);
mTopicList.add(0,info);
Log.d(TAG, "sucesss: " + mTopicList.size());
//通知更新
mTagAdapter.notifyDataSetChanged();
}
@Override
public void error(String ex) {
/*if(mRefreshLayout != null){
mRefreshLayout.endRefreshing();
}*/
}
};
private MatchCallBack<List<TopicItem>> mCallBack = new MatchCallBack<List<TopicItem>>() {
@Override
public void success(List<TopicItem> listEntities) {
/* if(mRefreshLayout != null){
mRefreshLayout.endRefreshing();
}*/
//添加数据到新的集合
TopicInfo info = new TopicInfo("第二个大标题内容");
//把子标签的集合放进来
info.addAllItem(listEntities);
mTopicList.add(info);
Log.d(TAG, "sucesss: " + mTopicList.size());
//通知更新
mTagAdapter.notifyDataSetChanged();
}
@Override
public void error(String ex) {
/* if(mRefreshLayout != null){
mRefreshLayout.endRefreshing();
}*/
}
};
标题适配器
private TopicTagAdapter mTagAdapter;
private class TopicTagAdapter extends BaseAdapter {
/**
* 标签
*/
public static final int ITEM_TAG = 0;
/**
* 内容item
*/
public static final int ITEM_CONTENT = 1;
@Override
public int getCount() {
if(mTopicList != null){
int count = 0;
for (TopicInfo info : mTopicList) {
count += info.getItemCount();
}
Log.d(TAG, "getCount: " + count);
return count;
}
return 0;
}
@Override
public Object getItem(int position) {
// 每组数据的tag
int firstIndex = 0;
for (TopicInfo info : mTopicList) {
//取出组数据的size
int size = info.getItemCount();
int childItemIndex = position - firstIndex; // 21 - 21
//取出孩子的数据
if(childItemIndex < size){
return info.getItem(childItemIndex);
}
//将tag移动到下一组数据的标签tag位置
firstIndex += size;
}
return null;
}
@Override
public int getItemViewType(int position) {
int firstIndex = 0;
for (TopicInfo info :mTopicList) {
int size = info.getItemCount();
int childItemIndex = position - firstIndex;
if(childItemIndex == 0){
return ITEM_TAG;
}
//将tag移动到下组数据的开始
firstIndex += size;
}
return ITEM_CONTENT;
}
@Override
public int getViewTypeCount() {
return super.getViewTypeCount() +1;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
int itemViewType = getItemViewType(position);
switch (itemViewType){
case ITEM_TAG: //标签
convertView = View.inflate(getContext(),R.layout.item_topic_tag,null);
TextView tvTag = (TextView) convertView.findViewById(R.id.tv_topic_tag);
TextView tvMore = (TextView) convertView.findViewById(R.id.tv_topic_more);
tvTag.setText(getItem(position).toString());
tvMore.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//根据获取的tag名称去集合中找是否有包含这个名称的对象
for (TopicInfo info : mTopicList) {
//获取标签的名称和info里面的tag进行比较,如果相等,表示当前点击的是这个对象里面的
if(getItem(position).equals(info.getTag())){
//传递数据
Bundle bundle = new Bundle();
// TopicInfo info = mTopicList.get(position); // 不能从这里取,集合里2 ,position=21
bundle.putParcelable(TopicListActivity.EXTRA_TOPIC_LIST, info);
startToActivity(TopicListActivity.class, bundle);
return;
}
}
// Toast.makeText(getContext(), "" + position, Toast.LENGTH_SHORT).show();
}
});
break;
case ITEM_CONTENT: //item内容
convertView = View.inflate(getContext(),R.layout.item_topic_content,null);
TextView tvTitle = (TextView) convertView.findViewById(R.id.tv_title);
TextView tvDes = (TextView) convertView.findViewById(R.id.tv_des);
//获取对象
Log.d(TAG, "getView: " + getItem(position).toString());
final TopicItem item = (TopicItem) getItem(position);
tvTitle.setText(item.getName());
tvDes.setText(item.getSeeCount() + "次浏览");
//item点击事件
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//判断当前点击的item是否是集合中topicInfo对象的
for (TopicInfo info : mTopicList) {
//判断集合中是否包含当前点击的topicItem
if(info.getTopicItems().contains(item)){
//传递数据
Bundle bundle = new Bundle();
// TopicInfo info = mTopicList.get(position); 不可以从这里获取
bundle.putParcelable(TopicListActivity.EXTRA_TOPIC_LIST, info);
startToActivity(TopicListActivity.class, bundle);
}
}
}
});
break;
}
return convertView;
}
}
最后一定要记得初始化
@Override
protected void initialData() {
inVpIndicator();
//获取话题数据
mTopicList = new ArrayList<>();
//设置适配器
mTagAdapter = new TopicTagAdapter();
mTagListview.setAdapter(mTagAdapter);
getTopicData();
}
一个xml(其实后面还有两个,这里只附大布局)
写在后面的话:其实当时写的这个界面还有刷新状态,但是因为重点是记录这两个,所以刷新的就没有写进来了,中间穿插的刷新代码也就被“砍”了
中间还有两个基类。
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="200dp">
<android.support.v4.view.ViewPager
android:id="@+id/tag_vp"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
<LinearLayout
android:orientation="horizontal"
android:id="@+id/tag_ll_dot"
android:layout_marginBottom="15dp"
android:layout_centerInParent="true"
android:layout_alignParentBottom="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</LinearLayout>
</RelativeLayout>
<ListView
android:id="@+id/tag_lv_content"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
FIN.