RecyclerView简单使用方法
RecyclerView的添加依赖文件RecyclerView的常规使用方法RecyclerView的点击监听写法
添加依赖文件
Project Structure中的Modules下的Dependencies点击绿色的+号找到v7下的recyclerView库
res/layout文件代码如下
<android
.support.v7
.widget.RecyclerView
android:id=
"@+id/recyclerview"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent">
</android
.support.v7
.widget.RecyclerView>
Activity中的代码类似与ListView
recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
listAdapter =
new DrawerListAdapter(
list);
RecyclerView.LayoutManager layoutManager =
new LinearLayoutManager(
this);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(listAdapter);
Activity中的代码
package
com.example.zx.samle_bar
import android
.support.v4
.widget.DrawerLayout
import android
.support.v7
.app.ActionBarDrawerToggle
import android
.support.v7
.app.AppCompatActivity
import android
.os.Bundle
import android
.support.v7
.widget.LinearLayoutManager
import android
.support.v7
.widget.RecyclerView
import android
.support.v7
.widget.Toolbar
import android
.view.Menu
import android
.view.MenuInflater
import android
.view.MenuItem
import android
.widget.ListView
import android
.widget.Toast
import
com.example.zx.samle_bar
.Adapter.DrawerListAdapter
import
com.example.zx.samle_bar
.Bean.DrawerContext
import java
.util.ArrayList
import java
.util.List
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView
private List<DrawerContext> list
private DrawerListAdapter listAdapter
@Override
protected void onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState)
setContentView(R
.layout.activity_main)
recyclerView = (RecyclerView) findViewById(R
.id.recyclerview)
list = new ArrayList<>()
initData()
RecyclerView
.LayoutManager layoutManager = new LinearLayoutManager(this)
recyclerView
.setLayoutManager(layoutManager)
recyclerView
.setAdapter(listAdapter)
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater()
inflater
.inflate(R
.menu.menu_main,menu)
return super
.onCreateOptionsMenu(menu)
}
private void initData(){
int[] imgs = {R
.drawable.settings,
R
.drawable.helpcircle,
R
.drawable.sharevariant,
R
.drawable.wikipedia}
String[] names={
"设置",
"帮助",
"分享",
"维基百科"}
for(int i =
0
DrawerContext context = new DrawerContext(imgs[i],names[i])
list
.add(context)
}
}
}
Adapter文件的代码如下
package com.example.zx.samle_bar.Adapter;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.example.zx.samle_bar.Bean.DrawerContext;
import com.example.zx.samle_bar.Interface.MyItemClickListener;
import com.example.zx.samle_bar.R;
import java.util.ArrayList;
import java.util.List;
/**
* Created by zx on 2017-03-12.
*/
public class DrawerListAdapter extends RecyclerView.Adapter {
private List<DrawerContext> drawerList;
private MyItemClickListener listener;
public DrawerListAdapter(List<DrawerContext> list){
this.drawerList = list;
}
@Override
public RecyclerView.ViewHolder
onCreateViewHolder(ViewGroup parent,
int viewType) {
final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_drawer_list,parent,
false);
RelativeLayout.LayoutParams lp =
new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
view.setLayoutParams(lp);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder,
int position) {
DrawerContext context = drawerList.get(position);
((MyViewHolder)holder).img.setImageResource(context.getImg());
((MyViewHolder)holder).tv.setText(context.getName());
((MyViewHolder)holder).itemView.setTag(position);
}
@Override
public int getItemCount() {
return drawerList.size();
}
public void setOnItemClickListener(MyItemClickListener listener){
this.listener = listener;
}
class MyViewHolder extends RecyclerView.ViewHolder{
public ImageView img;
public TextView tv;
public MyViewHolder(View view) {
super(view);
img = (ImageView) view.findViewById(R.id.icon);
tv = (TextView) view.findViewById(R.id.name);
}
}
}
DrawerContext的代码
package com.example.zx.samle_bar.Bean;
/**
* Created by zx on 2017-03-12.
*/
public class DrawerContext {
private int img;
private String name;
public DrawerContext() {
}
public DrawerContext(
int img, String name) {
this.img = img;
this.name = name;
}
public int getImg() {
return img;
}
public void setImg(
int img) {
this.img = img;
}
public String
getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
重点!重点!重点
由于RecyclerView并现ClickListener的监听! 因此需要自己写一个回调来实现对点击事件的监听 步骤如下:
创建一个Interface
package com.example.zx.samle_bar.Interface;
import android.view.View;
/**
* Created by zx on 2017-03-12.
*/
public interface MyItemClickListener {
void onItemClick(View view,
int position);
}
在Adapter文件中实例化,调用onClickListener 传递给 onItemClick
private MyItemClickListener listener;
view.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
if (listener ==
null){
listener.onItemClick(view,(
int)view.getTag());
}
}
});
再到Activity中实现这个函数的回调
drawerListAdapter.setOnItemClickListener(
new MyItemClickListener() {
@Override
public void onItemClick(View view,
int postion) {
Intent intent =
new Intent(getApplicationContext(), SlideMenuActivity.class);
intent.putExtra(
"itemId", postion);
startActivity(intent);
overridePendingTransition(R.anim.activity_in, R.anim.activity_out);
}
});
如果对回调函数有什么不明白的地方参见csdn大神的博客 http://blog.csdn.net/xiaanming/article/details/8703708/
转载请注明原文地址: https://ju.6miu.com/read-36740.html