RecyclerView
一、导入依赖
implementation ‘com.android.support:recyclerview-v7:29.0.0’
工具类
public class OkHttpUtils {
private OkHttpClient okHttpClient;
private Handler handler = new Handler();
private OkHttpUtils() {
okHttpClient = new OkHttpClient.Builder().readTimeout(60 * 1000, TimeUnit.MILLISECONDS).writeTimeout(60 * 1000, TimeUnit.MILLISECONDS).build();
}
private static OkHttpUtils okHttpUtils = new OkHttpUtils();
public static OkHttpUtils getInstance() {
return okHttpUtils;
}
public void doget(String url, final OkCallBack okCallBack) {
Request request = new Request.Builder().get().url(url).build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
final String message = e.getMessage();
handler.post(new Runnable() {
@Override
public void run() {
okCallBack.onError(message);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String string = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
okCallBack.onOk(string);
}
});
}
});
}
}
CallBack
public interface OkCallBack {
void onError(String message);
void onOk(String json);
}
监听接口
public interface MyListener {
void onItemClick(int position, View view);
}
适配器
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private Context context;
private List<JavaBean.DataBean> dataBeans;
private MyListener myListener;
public void setMyListener(MyListener myListener) {
this.myListener = myListener;
}
public MyAdapter(Context context, List<JavaBean.DataBean> dataBeans) {
this.context = context;
this.dataBeans = dataBeans;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(context).inflate(R.layout.layout_item, null);
return new MyViewHolder(inflate);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
holder.textView1_item.setText(dataBeans.get(position).getTitle() + "");
Glide.with(context).load(dataBeans.get(position).getPic()).into(holder.imageView_item);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myListener.onItemClick(position, v);
}
});
}
@Override
public int getItemCount() {
return dataBeans.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
ImageView imageView_item;
TextView textView1_item;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
imageView_item = itemView.findViewById(R.id.img_item);
textView1_item = itemView.findViewById(R.id.title_item);
}
}
}
Activity代码
public class MainActivity extends AppCompatActivity {
private RecyclerView recyId;
private List<JavaBean.DataBean> dataBeans = new ArrayList<>();
private MyAdapter myAdapter;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyId = (RecyclerView) findViewById(R.id.recy_id);
myAdapter = new MyAdapter(MainActivity.this, dataBeans);
recyId.setAdapter(myAdapter);
//必须设置的一种布局方式
recyId.setLayoutManager(new LinearLayoutManager(this));
//TODO分割线
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
//自定义分割线样式
dividerItemDecoration.setDrawable(getDrawable(R.drawable.ic_launcher_background));
//动画
DefaultItemAnimator defaultItemAnimator = new DefaultItemAnimator();
//设置删除动画时长
defaultItemAnimator.setRemoveDuration(1000);
//设置移动动画
defaultItemAnimator.setMoveDuration(1000);
recyId.setItemAnimator(defaultItemAnimator);
myAdapter.setMyListener(new MyListener() {
@Override
public void onItemClick(int position, View view) {
Toast.makeText(MainActivity.this, "" + dataBeans.get(position).getTitle(), Toast.LENGTH_SHORT).show();
}
});
//长按移动 横滑删除
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new ItemTouchHelper.Callback() {
@Override
public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
int i = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
int i1 = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
return makeMovementFlags(i, i1);
}
//响应用户拖拽实现上下滑动
@Override
public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
//通过viewHolder获得下标
int adapterPosition = viewHolder.getAdapterPosition();
int adapterPosition1 = target.getAdapterPosition();
//交换位置
Collections.swap(dataBeans, adapterPosition, adapterPosition1);
myAdapter.notifyItemMoved(adapterPosition, adapterPosition1);
return true;
}
//响应用户 左右滑动
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
int adapterPosition = viewHolder.getAdapterPosition();
//删除数据
dataBeans.remove(adapterPosition);
//刷新删除
myAdapter.notifyItemRemoved(adapterPosition);
}
});
itemTouchHelper.attachToRecyclerView(recyId);
OkHttpUtils.getInstance().doget("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1", new OkCallBack() {
@Override
public void onError(String message) {
}
@Override
public void onOk(String json) {
JavaBean javaBean = new Gson().fromJson(json, JavaBean.class);
List<JavaBean.DataBean> data = javaBean.getData();
dataBeans.addAll(data);
myAdapter.notifyDataSetChanged();
}
});
}
}
二、点击播放
创建接口
public interface DouyinListener {
void MyListener(int position, View view);
}
创建适配器
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private Context context;
private List<DouyinBean.ListBean> listBeans;
private DouyinListener douyinListener;
public void setDouyinListener(DouyinListener douyinListener) {
this.douyinListener = douyinListener;
}
public MyAdapter(Context context, List<DouyinBean.ListBean> listBeans) {
this.context = context;
this.listBeans = listBeans;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View inflate = LayoutInflater.from(context).inflate(R.layout.layout_item, null);
return new ViewHolder(inflate);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
holder.textView_item.setText(listBeans.get(position).getText() + "");
Glide.with(context).load(listBeans.get(position).getImage0()).into(holder.imageView_item);
holder.imageView_item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
douyinListener.MyListener(position, v);
}
});
}
@Override
public int getItemCount() {
return listBeans.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
ImageView imageView_item;
TextView textView_item;
public ViewHolder(@NonNull View itemView) {
super(itemView);
imageView_item = itemView.findViewById(R.id.img_item);
textView_item = itemView.findViewById(R.id.text_item);
}
}
}
播放Activity
public class VoidActivity extends AppCompatActivity {
private VideoView videoId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_void);
videoId = (VideoView) findViewById(R.id.video_id);
String url = getIntent().getStringExtra("url");
videoId.setVideoPath(url);
videoId.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
videoId.start();
}
});
}
}
Activity代码
public class MainActivity extends AppCompatActivity {
private RecyclerView recylerId;
private List<DouyinBean.ListBean> listBeans = new ArrayList<>();
private MyAdapter myAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recylerId = (RecyclerView) findViewById(R.id.recyler_id);
myAdapter = new MyAdapter(this, listBeans);
recylerId.setAdapter(myAdapter);
myAdapter.setDouyinListener(new DouyinListener() {
@Override
public void MyListener(int position, View view) {
Intent intent = new Intent(MainActivity.this, VoidActivity.class);
//添加视频网址
intent.putExtra("url", listBeans.get(position).getVideouri());
startActivity(intent);
}
});
recylerId.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
OkGo.<String>get("http://api.budejie.com/api/api_open.php?a=list&c=data&type=1&page=1")
.headers("User-Agent", "PostmanRuntime7.26.1")
.execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
String body = response.body();
Toast.makeText(MainActivity.this, "" + body, Toast.LENGTH_SHORT).show();
DouyinBean douyinBean = new Gson().fromJson(body, DouyinBean.class);
List<DouyinBean.ListBean> list = douyinBean.getList();
listBeans.addAll(list);
myAdapter.notifyDataSetChanged();
}
});
}
}