I'm new to RecyclerView and I want to implement OnItemClickListner like Listview. To do this I'm using following code.
public static class ViewHolder extends RecyclerView.ViewHolder {
public RecyclerView recyclerView;
public ViewHolder(View itemView) {
super(itemView);
recyclerView = (RecyclerView) itemView.findViewById(R.id.recycleViewIngredient);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Item Click Listner
}
});
}
}
The most simple way is creating own RecyclerView
, override onTouchEvent
and use it in your XML layout or code.
public class MyDisabledRecyclerView extends RecyclerView {
public MyDisabledRecyclerView(Context context) {
super(context);
}
public MyDisabledRecyclerView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public MyDisabledRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onTouchEvent(MotionEvent e) {
return false;
}
}
Then you can re-use that widget in other places without any extra logic.
Take a static variable and set it to false if u have clicked some item in the Parent recyclerView. Now using this flag
if(parent)
{
//set the listner for the View
}
Now no listner is set for your child recyclerview to respond
You have to use interface with inner RecycleView Class get it's clickListener into parent RecycleView Class.This will work.
Here is Sample
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
ArrayList<String> strings ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
strings = new ArrayList<>();
strings.add("A");
strings.add("B");
strings.add("C");
strings.add("D");
strings.add("E");
strings.add("F");
recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.HORIZONTAL,false));
recyclerView.setAdapter(new MyAdapter(strings));
recyclerView.setClickable(true);
}
}
and Parent Adapter is
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
ArrayList<String> strings;
public MyAdapter(ArrayList<String> strings) {
this.strings=strings;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter, parent, false);
view.setLayoutParams(new ViewGroup.LayoutParams(200,200));
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
holder.textView.setText(strings.get(position));
holder.recyclerView.setLayoutManager(new LinearLayoutManager(holder.recyclerView.getContext(), LinearLayoutManager.VERTICAL, false));
holder.recyclerView.setAdapter(new MyChildAdapter(strings, new setOnClick() {
@Override
public void setOnClick() {
Toast.makeText(holder.itemView .getContext(),"FF F",Toast.LENGTH_SHORT).show();
}
}));
}
@Override
public int getItemCount() {
return strings.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
RecyclerView recyclerView;
public ViewHolder(final View view) {
super(view);
textView = (TextView) view.findViewById(R.id.textView);
recyclerView = (RecyclerView)view. findViewById(R.id.recyclerView);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(view.getContext(),"FFF",Toast.LENGTH_SHORT).show();
}
});
}
}
}
and ChildAdapter Is
public class MyChildAdapter extends RecyclerView.Adapter<MyChildAdapter.ViewHolder> {
ArrayList<String> strings;
static setOnClick setOnClick;
public MyChildAdapter(ArrayList<String> strings, setOnClick setOnClick) {
this.strings=strings;
this.setOnClick = setOnClick;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter, parent, false);
view.setLayoutParams(new ViewGroup.LayoutParams(100,100));
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.textView.setText(strings.get(position));
}
@Override
public int getItemCount() {
return strings.size();
}
static class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public ViewHolder(View view) {
super(view);
textView = (TextView) view.findViewById(R.id.textView);
/* view.setClickable(false);
view.setFocusable(false);
view.setEnabled(false);*/
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
setOnClick.setOnClick();
}
});
}
}
}
and Interface is
interface setOnClick{
void setOnClick();
}
and adapter.xml layout is
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="false">
<TextView
android:id="@+id/textView"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="#fff"
android:padding="10dp"
android:textSize="30dp"
android:clickable="false"
/>
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_height="match_parent"
android:layout_width="100dp"
/>
</LinearLayout>
try:
viewHolder.someInnerRecyclerView.suppressLayout(true);
viewHolder.someInnerRecyclerView.setFocusable(false);
viewHolder.someInnerRecyclerView.setClickable(false);
使用它来禁用用户交互
mRecyclerView.suppressLayout(true)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.