效果图:
实现listview:
activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.v4.widget.SwipeRefreshLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/refreshLayout">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/recyclerView"
></android.support.v7.widget.RecyclerView>
</android.support.v4.widget.SwipeRefreshLayout>
</LinearLayout>
recyclerview_item.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/pic1"
android:id="@+id/iv"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="第一行"
android:textSize="20sp"
android:layout_marginLeft="150dp"
android:id="@+id/tv"/>
</LinearLayout>
MainActivity.java:
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private SwipeRefreshLayout refreshLayout;
private MyAdapter adapter;
private List<Map<String, Object>> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initRecyclerView();
initSwipeRefreshLayout();
}
private void initSwipeRefreshLayout() {
refreshLayout = findViewById(R.id.refreshLayout);
//设置进度条颜色
refreshLayout.setColorSchemeColors(getResources().getColor(R.color.colorAccent));
//设置控件可用
refreshLayout.setEnabled(true);
//下拉时延时三秒更新三行数据
refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
Map<String, Object> map = new HashMap<>();
map.put("iv", R.drawable.pic3);
//参数一:插入位置
list.add(0,map);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//更新列表
adapter.notifyDataSetChanged();
//停止刷新
refreshLayout.setRefreshing(false);
}
},3000);
}
});
}
private void initRecyclerView() {
recyclerView = findViewById(R.id.recyclerView);
/*
设置布局管理器
*
* 参数一列数参数二:排列方式
* */
LinearLayoutManager lm = new LinearLayoutManager(this);
//指定列表线性布局
recyclerView.setLayoutManager(lm);
//指定列表排列方式,默认是纵向垂直
lm.setOrientation(LinearLayoutManager.VERTICAL);
lm.setReverseLayout(false);
for (int i = 0; i < Data.iv.length; i++) {
Map<String, Object> map = new HashMap<>();
map.put("iv", Data.iv[i]);
map.put("tv", "第" + i + "行");
list.add(map);
}
adapter = new MyAdapter(this,list);
recyclerView.setAdapter(adapter);
//4.调用回调接口
adapter.setOnClickListener(new MyAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
Toast.makeText(MainActivity.this, "点击了第"+position+"行", Toast.LENGTH_SHORT).show();
}
});
}
}
MyAdapter.java:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder>{
private Context context;
private List<Map<String,Object>> list;
private LayoutInflater inflater;
//声明接口
private OnItemClickListener mOnItemClickListener;
public MyAdapter(Context context, List<Map<String,Object>> list){
this.context = context;
this.list = list;
inflater = LayoutInflater.from(context);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//参数一:行布局,参数二:填充的根视图,参数三:是否将载入的视图绑定到根视图中
View view = inflater.inflate(R.layout.recyclerview_item,parent, false);
//返回自定义viewholder
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
//设置控件数据
Map map = list.get(position);
holder.imageView.setImageResource((Integer) map.get("iv"));
holder.textView.setText((String) map.get("tv"));
}
@Override
public int getItemCount() {
//返回Item总行数
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
private TextView textView;
private ImageView imageView;
public MyViewHolder(View itemView) {
super(itemView);
//获取控件
textView = itemView.findViewById(R.id.tv);
imageView = itemView.findViewById(R.id.iv);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//3.为对象设置回调方法
if (mOnItemClickListener != null) {
mOnItemClickListener.onItemClick(getAdapterPosition());
}
}
});
}
}
//自定义回调接口
//1.定义接口和接口方法
public interface OnItemClickListener {
public void onItemClick(int position);
}
//2.为接口设置set方法
public void setOnClickListener(OnItemClickListener onItemClickListener) {
this.mOnItemClickListener = onItemClickListener;
}
}
Data.java:
public class Data {
public static int iv[] = {
R.drawable.pic1,
R.drawable.pic2,
R.drawable.pic3,
R.drawable.pic4,
R.drawable.pic5,
R.drawable.pic6,
R.drawable.pic7,
R.drawable.pic8,
R.drawable.pic9,
R.drawable.pic10,
R.drawable.pic11,
R.drawable.pic12,
R.drawable.pic13,
R.drawable.pic14,
R.drawable.pic15,
R.drawable.pic16,
R.drawable.pic17,
R.drawable.pic18,
R.drawable.pic19,
R.drawable.pic20,
R.drawable.pic21,
R.drawable.pic22,
R.drawable.pic23,
R.drawable.pic24,
R.drawable.pic25,
R.drawable.pic26,
R.drawable.pic27,
R.drawable.pic28,
R.drawable.pic29,
R.drawable.pic30
};
}
gridview.java:
MainActivity.java:
//参数一:上下文,参数二:列数
...
GridLayoutManager lm = new GridLayoutManager(this,3);
...
#Staggeredview.java:
MainActivity.java:
//参数一列数,参数二:排列方式
...
StaggeredGridLayoutManager lm = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.HORIZONTAL);
...