在Adapter里设置一个内部接口
CallbackInterface callbackInterface;
interface CallbackInterface{
void callbackMethod(int position);
}
点击Adapter某一个的item时,调用接口方法
item1_linear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
callbackInterface.callbackMethod(position);
}
});
在Activity中实现接口
adapter.callbackInterface = new MyAdapter.CallbackInterface() {
@Override
public void callbackMethod(int position) {
main_tv.setText("点击了第:"+position+"个item");
}
};
整体代码
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_weight="9"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView
android:id="@+id/main_tv"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_weight="1"
android:gravity="center"
android:layout_gravity="center"
android:layout_marginBottom="20dp"
android:text="记录点击事件" />
</LinearLayout>
item1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/item1_linear"
android:layout_margin="5dp"
android:orientation="vertical"
android:layout_width="match_parent"
android:background="#22000000"
android:padding="5dp"
android:layout_height="wrap_content">
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:textSize="12dp"
android:text="账号" />
<TextView
android:id="@+id/tv_name"
android:text="消息"
android:layout_margin="3dp"
android:paddingRight="2dp"
android:paddingLeft="2dp"
android:padding="3dp"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
扫描二维码关注公众号,回复:
15692206 查看本文章
MainActivity.java
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private RecyclerView rv;
private ArrayList<UserInfo> list;
private MyAdapter adapter;
private TextView main_tv;
private LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.VERTICAL, false);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//去掉顶部标题
getSupportActionBar().hide();
setContentView(R.layout.activity_main);
list = new ArrayList<>();
rv = (RecyclerView) findViewById(R.id.rv);
main_tv = (TextView)findViewById(R.id.main_tv);
adapter = new MyAdapter(this);
initData();
adapter.callbackInterface = new MyAdapter.CallbackInterface() {
@Override
public void callbackMethod(int position) {
main_tv.setText("点击了第:"+position+"个item");
}
};
// 向适配器set数据
adapter.setData(list);
rv.setAdapter(adapter);
manager.setOrientation(LinearLayoutManager.VERTICAL);
rv.setLayoutManager(manager);
}
// 数据初始化
private void initData(){
for(int i = 0; i<10; i++){
UserInfo info = new UserInfo("123","消息"+(i+1));
list.add(info);
}
}
}
MyAdapter.java
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class MyAdapter extends RecyclerView.Adapter {
private Context context;
private ArrayList<UserInfo> data;
public MyAdapter(Context context) {
this.context = context;
data = new ArrayList<>();
}
public void setData(ArrayList<UserInfo> data) {
this.data = data;
// 刷新
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
return 1;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder holder = null;
View view = LayoutInflater.from(context).inflate(R.layout.item1,parent,false);
holder = new OneViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
OneViewHolder oneViewHolder = (OneViewHolder) holder;
oneViewHolder.name1.setText((String)data.get(position).getData());
oneViewHolder.item1_linear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
callbackInterface.callbackMethod(position);
}
});
}
@Override
public int getItemCount() {
return data != null && data.size() > 0 ? data.size() : 0;
}
class OneViewHolder extends RecyclerView.ViewHolder{
private TextView tv1;
private TextView name1;
private LinearLayout item1_linear;
public OneViewHolder(View itemView) {
super(itemView);
tv1 = (TextView) itemView.findViewById(R.id.tv1);
name1 = (TextView) itemView.findViewById(R.id.tv_name);
item1_linear = (LinearLayout) itemView.findViewById(R.id.item1_linear);
}
}
CallbackInterface callbackInterface;
/**
* 回调接口
*/
interface CallbackInterface{
void callbackMethod(int position);
}
}
实体类 UserInfo.java
import java.io.Serializable;
public class UserInfo implements Serializable {
/**
* 账号
*/
private String zhanghao;
/**
* 内容
*/
private String data;
public UserInfo(String zhanghao, String data){
this.zhanghao = zhanghao;
this.data = data;
}
public String getZhanghao() {
return zhanghao;
}
public void setZhanghao(String zhanghao) {
this.zhanghao = zhanghao;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
@Override
public String toString() {
return "UserInfo{" +
", zhanghao='" + zhanghao + '\'' +
", data='" + data + '\'' +
'}';
}
}