处理条目点击事件的问题,我最后的那个消息提示框显示不出来,但点击条目我能在控制台输出信息。
public class MainActivity extends AppCompatActivity {
private static final String Tag="MainActivity";
private RecyclerView mlist;
private List<itemb> itembs;
private RecyclerViewBaseAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.v);
mlist=this.findViewById(R.id.shuju);
iniData();
showlist(true,false);
}
private void iniltListener() {
mAdapter.setOnItemClickListener(new RecyclerViewBaseAdapter.OnItemClickListener() {
@Override
public void onItemClick(int position) {
//处理条目的点击事件
Toast.makeText(MainActivity.this,"您点击的是个条目",Toast.LENGTH_SHORT).show();
Log.d("MainActivity","最后一步");
System.out.println(position);
}
});
}
private void iniData() {
itembs = new ArrayList<>();
for (int i = 0; i < Datas.icons.length; i++) {
itemb a = new itemb();
a.icon = Datas.icons[i];
a.text = "我是第" + (i + 1) + "张图片";
itembs.add(a);
}
}
public boolean onCreateOptionsMenu (Menu menu){
getMenuInflater().inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
int itrmid = item.getItemId();
switch (itrmid) {
case R.id.menu1_1:
showlist(true,false);
break;
case R.id.menu1_2:
showlist(true,true);
break;
case R.id.menu1_3:
showlist(false,false);
break;
case R.id.menu1_4:
showlist(false,true);
break;
case R.id.menu2_1:
showgridview(true,false);
break;
case R.id.menu2_2:
showgridview(true,true);
break;
case R.id.menu2_3:
showgridview(false,false);
break;
case R.id.menu2_4:
showgridview(false,true);
break;
case R.id.menu3_1:
showStagger(true,false);
break;
case R.id.menu3_2:
showStagger(true,true);
break;
case R.id.menu3_3:
showStagger(false,false);
break;
case R.id.menu3_4:
showStagger(false,true);
break;
}
return super.onOptionsItemSelected(item);
}
private void showStagger(boolean isVertical, boolean isReverse) {
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2,isVertical?StaggeredGridLayoutManager.VERTICAL:StaggeredGridLayoutManager.HORIZONTAL);
layoutManager.setReverseLayout(isReverse);
mlist.setLayoutManager(layoutManager);
mAdapter =new StaggerAdapter(itembs);
mlist.setAdapter(mAdapter);
iniltListener();
}
public void showlist(boolean isVertical,boolean isReverse){
//设置样式,就是设置布局管理器
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
//设置水平还是垂直
layoutManager.setOrientation(isVertical? LinearLayoutManager.VERTICAL:LinearLayoutManager.HORIZONTAL);
//设置(标准)还是反向
layoutManager.setReverseLayout(isReverse);
mlist.setLayoutManager(layoutManager);
//创建适配器
mAdapter = new RcrcyAdapter(itembs);
//设置到RC里中
mlist.setAdapter(mAdapter);
iniltListener();
}
public void showgridview(boolean isVertical ,boolean isReverse){
GridLayoutManager layoutManager =new GridLayoutManager(this,3);
//设置水平还是垂直
layoutManager.setOrientation(isVertical? LinearLayoutManager.VERTICAL:LinearLayoutManager.HORIZONTAL);
//设置(标准)还是反向
layoutManager.setReverseLayout(isReverse);
mlist.setLayoutManager(layoutManager);
mAdapter = new GridAdapter(itembs);
mlist.setAdapter(mAdapter);
iniltListener();
}
}
父适配器
public abstract class RecyclerViewBaseAdapter extends RecyclerView.Adapter<RecyclerViewBaseAdapter.InnerHoder> {
private List<itemb> itembs;
private OnItemClickListener mOnItemClicklListener;
//构建方法是获得数据
public RecyclerViewBaseAdapter(List<itemb> itembs){
this.itembs=itembs;
}
@NonNull
@Override
//创建条目的界面
public RecyclerViewBaseAdapter.InnerHoder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view=getsubView(parent,viewType);
return new InnerHoder(view);
}
protected abstract View getsubView(ViewGroup parent,int viewType);
//这里用来绑定Hoder,来设置数据的
@Override
public void onBindViewHolder(@NonNull RecyclerViewBaseAdapter.InnerHoder holder, int position) {
//设置数据
holder.setData(itembs.get(position),position);
}
//条目个数
@Override
public int getItemCount() {
if(itembs!=null){
return itembs.size();
}
return 0;
}
public void setOnItemClickListener(OnItemClickListener listener) {
//设置一个监听,其实就是一个接口,一个回调的接口
this.mOnItemClicklListener =listener;
Log.d("MainActivity","运行不");
}
/*
*编写回调的步骤
* 1、创建这个接口
* 2、定义接口内部的方法
* 3、提供设置接口的方法(其实是外部实现)
* 4、接口方法的调用
* */
public interface OnItemClickListener{
void onItemClick(int position);
}
public class InnerHoder extends RecyclerView.ViewHolder{
ImageView icon;
TextView text;
int mposition;
public InnerHoder(@NonNull View itemView) {
super(itemView);
//绑定设置数据的控件
icon = (ImageView) itemView.findViewById(R.id.icon);
text = (TextView) itemView.findViewById(R.id.title);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mOnItemClicklListener!=null){
mOnItemClicklListener.onItemClick(mposition);
Log.d("MainActivity","行不?");
}
}
});
}
//给控件设置值
public void setData(itemb itemb,int position) {
this.mposition=position;
icon.setImageResource(itemb.icon);
text.setText(itemb.text);
}
}
}
你是说这个 Toast.makeText(MainActivity.this,"您点击的是个条目",Toast.LENGTH_SHORT).show();没有弹出提示吗?