RecycleView多类型展示,简单轮播图

MainActivity类

package com.baway.hanyongguang;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.baway.hanyongguang.Bean.BaseHolder;
import com.baway.hanyongguang.Bean.ContentInfo;
import com.baway.hanyongguang.Bean.Holder;
import com.baway.hanyongguang.Bean.Holder2;
import com.baway.hanyongguang.Bean.ImgInfo;
import com.baway.hanyongguang.Bean.Myimg;
import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.squareup.okhttp.Call;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(msg.what==1){
                int currentItem = viepager.getCurrentItem();
                currentItem++;
                viepager.setCurrentItem(currentItem);
                handler.sendEmptyMessageDelayed(1,2000);
            }
        }
    };

    private RecyclerView recycle;
    private ViewPager viepager;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getData();
        initView();
        getRecycyleData();
    }

    private void getRecycyleData() {
        //创建okHttpClient对象
        OkHttpClient mOkHttpClient = new OkHttpClient();
//创建一个Request
        final Request request = new Request.Builder()
                .url("http://i.dxy.cn/snsapi/home/feeds/list/all?" +
                        "sid=4df0360f-2a20-4198-beb8-4dc5660c4f08&u=" +
                        "zhetianyishou&s=10&mc=0000000049029dcaffffffff9" +
                        "9d603a9&token=TGT-13165-buaw5fHpqLlefw9bSOB0oF41" +
                        "fobaV4rMZmK-50&hardName=iToolsAVM_T0008098S&ac=4124c5" +
                        "f1-2029-4fda-b06f-a87ac5ad8d11&bv=2013&vc=6.0.6&tid=c25e673" +
                        "d-e82a-4e46-bd4e-c1e86d497126&vs=4.4.4&ref_tid=54720e1a-7eed-4993-9f51-3d760f3d0b2e")
                .build();
//new call
        Call call = mOkHttpClient.newCall(request);
//请求加入调度
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {
            }

            @Override
            public void onResponse(final Response response) throws IOException {
                String RecycleData = response.body().string();
                final Gson gson = new Gson();
                final Myimg myimg = gson.fromJson(RecycleData, Myimg.class);
                MainActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        initData(gson, myimg);
                    }
                });
            }

            private void initData(final Gson gson, final Myimg myimg) {
                //设置RECYCLEView属性
                recycle.setLayoutManager(new LinearLayoutManager(MainActivity.this, LinearLayoutManager.VERTICAL, false));

                recycle.setAdapter(new RecyclerView.Adapter<BaseHolder>() {

                    int type = -1;
                    int type1 = 0;
                    int type2 = 1;

                    @Override
                    public BaseHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                        BaseHolder holder = null;
                        if (viewType == type1) {
                            View view = View.inflate(MainActivity.this, R.layout.item, null);
                            holder = new Holder(view);
                        } else if (viewType == type2) {
                            View view = View.inflate(MainActivity.this, R.layout.item2, null);
                            holder = new Holder2(view);
                        }
                        return holder;
                    }

                    @Override
                    public void onBindViewHolder(BaseHolder holder, int position) {
                        //直接传条目
                        holder.getData(MainActivity.this, myimg.getItems().get(position));
                    }

                    @Override
                    public int getItemCount() {
                        return myimg.getItems().size();
                    }

                    @Override
                    public int getItemViewType(int position) {
                        String content = myimg.getItems().get(position).getContent();
                        ContentInfo contentInfo = gson.fromJson(content, ContentInfo.class);
                        if (contentInfo.getUrl() == null) {
                            type = type1;
                        } else {
                            type = type2;
                        }
                        return type;
                    }
                });
            }
        });

    }

    private void initView() {
        recycle = (RecyclerView) findViewById(R.id.recycleView);
        viepager = (ViewPager) findViewById(R.id.viewpager);
    }

    private void getData() {
        //创建okHttpClient对象
        OkHttpClient mOkHttpClient = new OkHttpClient();
//创建一个Request
        final Request request = new Request.Builder()
                .url("http://i.dxy.cn/snsapi/event/count/list/all")
                .build();
//new call
        Call call = mOkHttpClient.newCall(request);
//请求加入调度
        call.enqueue(new Callback() {


            @Override
            public void onFailure(Request request, IOException e) {
            }

            @Override
            public void onResponse(final Response response) throws IOException {
                String data = response.body().string();
                Log.i("~~~", data + "");
                Gson gson = new Gson();
                final ImgInfo imgInfo = gson.fromJson(data, ImgInfo.class);
                Log.i("~", imgInfo.getItems().get(0).getPath() + "");
                MainActivity.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        initviepager(imgInfo);
                    }
                });
            }

            private void initviepager(final ImgInfo imgInfo) {
                viepager.setAdapter(new 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 img = new ImageView(MainActivity.this);

                        ImageLoader.getInstance().displayImage(imgInfo.getItems().get(position % 3).getPath(), img);
                        container.addView(img);

                        return img;
                    }

                    @Override
                    public void destroyItem(ViewGroup container, int position, Object object) {
                        container.removeView((View) object);
                    }

                });
                handler.sendEmptyMessageDelayed(1,2000);
            }
        });

    }


}

Holder类
package com.baway.hanyongguang.Bean;

import android.content.Context;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.baway.hanyongguang.R;
import com.nostra13.universalimageloader.core.ImageLoader;

/**
 * Created by Administrator on 2016/12/19.
 */
public class Holder extends BaseHolder {


    public TextView tv1;
    public TextView tv2;
    public ImageView img1;
    public TextView tv3;

    public Holder(View itemView) {
        super(itemView);
        img1 = (ImageView) itemView.findViewById(R.id.img1);
        tv3 = (TextView) itemView.findViewById(R.id.tv3);
        tv1 = (TextView) itemView.findViewById(R.id.tv1);
        tv2 = (TextView) itemView.findViewById(R.id.tv2);

    }

    @Override
    public void getData(Context context, Object o) {
        Myimg.ItemsBean item = (Myimg.ItemsBean) o;
        ImageLoader.getInstance().displayImage("http://img.dxycdn.com/avatars/120/"+item.getInfoAvatar(),img1);
        tv3.setText(item.getCity());
        tv1.setText(item.getSourceTitle());
        tv2.setText(item.getContent());
    }
}
package com.baway.hanyongguang.Bean;

import android.content.Context;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.baway.hanyongguang.R;
import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.ImageLoader;

/**
 * Created by Administrator on 2016/12/19.
 */
public class Holder2 extends BaseHolder {

    public ImageView img;
    public TextView tv1;
    public TextView tv2;
    public ImageView img1;
    public TextView tv3;
    public Holder2(View itemView) {
        super(itemView);
        img1 = (ImageView) itemView.findViewById(R.id.img1);
        tv3 = (TextView) itemView.findViewById(R.id.tv3);
        img = (ImageView) itemView.findViewById(R.id.img);
        tv1 = (TextView) itemView.findViewById(R.id.tv1);
        tv2 = (TextView) itemView.findViewById(R.id.tv2);
    }

    @Override
    public void getData(Context context, Object o) {
        Myimg.ItemsBean item = (Myimg.ItemsBean) o;
        String content = item.getContent();

        Gson gson = new Gson();
        ContentInfo contentInfo = gson.fromJson(content, ContentInfo.class);
        ImageLoader.getInstance().displayImage("http://img.dxycdn.com/avatars/120/"+item.getInfoAvatar(),img1);
        tv3.setText(item.getCity());
        ImageLoader.getInstance().displayImage("http://res.dxycdn.com/upload/"+contentInfo.getUrl(),img);
        tv1.setText(item.getSourceTitle());
        tv2.setText(item.getContent());
    }
}
BaseHolder类 抽取的基类
package com.baway.hanyongguang.Bean;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;

/**
 * Created by Administrator on 2016/12/21.
 */
public abstract class BaseHolder<T> extends RecyclerView.ViewHolder {
    public BaseHolder(View itemView) {
        super(itemView);
    }

    public abstract void getData(Context context,T t);
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在RecyclerView展示后台图片和文字,你可以使用一个布局文件,其中包含一个ImageView和一个TextView。在RecyclerView的Adapter中,你需要绑定这些视图到数据源中的相应项。对于图片,你可以使用Glide或Picasso等图片加载库来加载图片。以下是一个简单的示例: 首先,在布局文件中添加一个ImageView和一个TextView: ```xml <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="200dp" android:scaleType="centerCrop"/> <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/image" android:textSize="16sp" android:padding="8dp"/> </RelativeLayout> ``` 接下来,在RecyclerView的Adapter中,你需要绑定这些视图到数据源中的相应项。例如,如果你的数据源是一个列表,其中每个项包含一个图片URL和一个说明文本,那么你可以这样做: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private List<MyItem> itemList; public static class MyViewHolder extends RecyclerView.ViewHolder { public ImageView image; public TextView text; public MyViewHolder(View view) { super(view); image = view.findViewById(R.id.image); text = view.findViewById(R.id.text); } } public MyAdapter(List<MyItem> itemList) { this.itemList = itemList; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.my_item_layout, parent, false); return new MyViewHolder(itemView); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { MyItem item = itemList.get(position); // 加载图片 Glide.with(holder.image.getContext()) .load(item.getImageUrl()) .into(holder.image); // 设置文本 holder.text.setText(item.getText()); } @Override public int getItemCount() { return itemList.size(); } } ``` 在这个例子中,我们假设`MyItem`是一个包含图片URL和说明文本的数据模型。在`onBindViewHolder`方法中,我们使用Glide来加载图片,并将文本设置为TextView的文本。注意,在这个例子中,我们使用了一个RelativeLayout来包含ImageView和TextView,这样可以方便地控制它们之间的位置关系。 最后,在你的Activity或Fragment中,你需要创建RecyclerView和Adapter,并将它们绑定在一起: ```java RecyclerView recyclerView = findViewById(R.id.recycler_view); MyAdapter adapter = new MyAdapter(itemList); recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(this)); ``` 在这个例子中,我们使用LinearLayoutManager来设置RecyclerView的布局管理器。你可以根据需要使用其他类型的布局管理器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值