一个最简单的列表与回调案例
先上效果图,回调显示当前点击的第几个子空控件activity_main.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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
item_recycle.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/item_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/teal_700" />
</LinearLayout>
适配器 RecyclerAdapter
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyHolder> {
private List<String> list;
public interface CallBackItem {
void onClickItemResult(int index);
}
public CallBackItem callBackItem;
public void setCallBackItem(CallBackItem callBackItem) {
this.callBackItem = callBackItem;
}
public RecyclerAdapter(List<String> list) {
this.list = list;
}
@NonNull
@Override
public MyHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new MyHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycle, parent, false));
}
@Override
public void onBindViewHolder(@NonNull MyHolder holder, int position) {
holder.mTv.setText(list.get(position));
holder.mTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//调用回调时返回的值,不光可以是int类,也可以是String 类型 等等
callBackItem.onClickItemResult(position + 1);型
}
});
}
@Override
public int getItemCount() {
return list.size();
}
class MyHolder extends RecyclerView.ViewHolder {
TextView mTv;
public MyHolder(@NonNull View itemView) {
super(itemView);
mTv = itemView.findViewById(R.id.item_tv);
}
}
ManActivity
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
RecyclerAdapter mRecyclerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
mRecyclerView = findViewById(R.id.recyclerView);
//设置LayoutManager,以LinearLayoutManager为例子进行线性布局
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
//设置分割线
mRecyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
//创建适配器
mRecyclerAdapter = new RecyclerAdapter(getArrayList());
//设置适配器
mRecyclerView.setAdapter(mRecyclerAdapter);
mRecyclerAdapter.setCallBackItem(new RecyclerAdapter.CallBackItem() {
@Override
public void onClickItemResult(int index) {
Toast.makeText(MainActivity.this,"点击了第"+index+"条数据",Toast.LENGTH_SHORT).show();
}
});
}
private List<String> getArrayList() {
List<String> dataList = new ArrayList<>();
for (int n = 1; n < 100; n++) {
dataList.add("第" + n + "条数据");
}
return dataList;
}
}
回调就是不能第一时间返回时,当满足某一个条件后,给你返回你提的问题的结果。
比如你弹出一个dialog 修改了一个activity上的信息,然而,关闭dialog后,你的activity 上边显示的值你没有更新,这时候就可以用回调,