我的适配器文件 在这些我声明布尔值和一个函数,即setCheckboxVisibilityStatus((,如何在活动中调用该函数。 如果我像adapter.setCheckboxVisibilityStatus((一样调用,它会显示错误。
public class BrowseHuntSlideAdapter extensions RecyclerView.Adapter {
public LayoutInflater inflater;
private ArrayList<BrowseHuntSlideModel> dataModelArrayList;
Double lat, lng;
String address;
private boolean hideChkbox = false;
public static ArrayList<Object> mySelectPlace = new ArrayList<Object> ();
public static ArrayList<String> mySelectPlaceAdd = new ArrayList<> ();
public static ArrayList<String> mySelectplaceImg = new ArrayList<> ();
public static ArrayList<String> mySelectplaceDesc = new ArrayList<> ();
public BrowseHuntSlideAdapter(Context ctx, ArrayList<BrowseHuntSlideModel> dataModelArrayList) {
inflater = LayoutInflater.from ( ctx );
this.dataModelArrayList = dataModelArrayList;
//this.mapboxMap = mapBoxMap;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate ( R.layout.browse_slide_list_item, parent, false );
MyViewHolder holder = new MyViewHolder ( view );
return holder;
}
public void setCheckboxVisibilityStatus(boolean status) {
hideChkbox = status;
notifyDataSetChanged();
}
@Override
public void onBindViewHolder(BrowseHuntSlideAdapter.MyViewHolder holder, int position) {
if(hideChkbox)
holder.checkBox.setVisibility(GONE); //Make it invisible instead of GONE if needed.
else
holder.checkBox.setVisibility(VISIBLE);
}
@Override
public int getItemCount() {
return dataModelArrayList.size ();
}
class MyViewHolder extends RecyclerView.ViewHolder {
TextView place_name, place_address, distance;
ImageView place_image;
Button button;
CheckBox checkBox;
public MyViewHolder(View itemView) {
super ( itemView );
Context context = itemView.getContext ();
checkBox = (CheckBox)itemView.findViewById(R.id.checkbox);
//place_address1 = (TextView) itemView.findViewById ( R.id.place_address );
}
}}
和我在活动中的编辑按钮......
公共类 Gotosafari 扩展了 AppCompatActivity 实现 OnMapReadyCallback, PermissionsListener{
String srno;
private RecyclerView rList, rList2;
private LinearLayoutManager linearLayoutManager;
private DividerItemDecoration dividerItemDecoration;
private static ArrayList<BrowseHuntSlideModel> PlacesList;
private RecyclerView.Adapter adapter, adapter1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
rList = (RecyclerView) findViewById(R.id.recycle_slide_list);
PlacesList = new ArrayList<>();
adapter = new BrowseHuntSlideAdapter(getApplicationContext(),PlacesList);
linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
dividerItemDecoration = new
DividerItemDecoration(rList.getContext(),
linearLayoutManager.getOrientation());
rList.setLayoutManager(new LinearLayoutManager(this,
LinearLayoutManager.VERTICAL, false));
rList.addItemDecoration(dividerItemDecoration);
rList.setAdapter(adapter);
Button edtbtn = (Button) findViewById(R.id.edtbtn);
Button donebtn = (Button) findViewById(R.id.donebtn);
donebtn.setVisibility(View.INVISIBLE);
edtbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edtbtn.setVisibility(View.INVISIBLE);
donebtn.setVisibility(View.VISIBLE);
edtbtn.setText("EDIT");
adapter.setCheckBoxVisibilityStatus(true);
}
});
donebtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
donebtn.setVisibility(View.INVISIBLE);
edtbtn.setVisibility(View.VISIBLE);
donebtn.setText("DONE");
flagtrue= "false";
adapter.notifyDataSetChanged();
mySelectPlaceAdd.clear();
mySelectplaceDesc.clear();
}
});
addFirstStopToStopsList ();
}
在适配器中,创建一个如下所示的接口:
public interface ListAction {
public void onCheckBoxClick(int position);
}
然后,单击您的复选框,如下所示:
holder.your_check_box.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listAction.onCheckBoxClick(position);
}
}
});
然后,在您的活动中实现该接口并覆盖它的方法:
class YourActivity implements YouAdapterClass.ListAction
并覆盖它的方法如下:
@Override
public void onCheckBoxClick(int position){
//Do Whatever you want here..
}
简单。。!!
编辑
此外,还将侦听器从活动传递到适配器类通过构造函数,如下所示:
mAdapter = new YouAdapterClass(getActivity(),this);
这 - 第二个参数。
在您的适配器类中,请执行以下操作:
//Declare
private YourAdapterClass.ListAction listAction;
//Constructor
public YourAdapterClass(Context mContext, YourAdapterClass.ListAction listAction) {
this.mContext = mContext;
this.listAction = listAction;
}
在回收器视图适配器中创建一个方法,如公共 void hideCheckBox((;在该方法中,按标签获取该复选框视图并将其隐藏。您必须将标签添加到要隐藏的复选框中。您可以从活动中调用该方法,因为您有适配器实例。
例如
在适配器中,方法类似于,
public void hideCheckBox(){
//get view by tag and hide it
notifyDataSetChanged();
}
现在假设您的适配器名称是 mAdapter 那么,
edtbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edtbtn.setVisibility(View.INVISIBLE);
donebtn.setVisibility(View.VISIBLE);
edtbtn.setText("EDIT");
// want to apply code here.
mAdapter.hideCheckBox();
}
});
当你说隐藏...是否要一次隐藏所有复选框...?如果是,则在适配器中创建一个布尔标志,并将其最初设置为 true。然后创建一个 setter 方法,您可以在其中将其设置为 false,稍后从活动中notifyDataSetChanged
...在onBindViewHolder
方法中,您应该设置比较该标志的复选框的可见性。
如果要隐藏列表中的某些复选框,而不是全部复选框。您应该在数据模型中拥有该标志,然后稍后对其进行更改并调用notifyItemChanged
到这些特定项...
将适配器类中的标志变量作为类变量。
private int boolean hideChkbox = false; //false intially so that it will show open adapter created.
现在在适配器中创建一个方法。
public void setCheckboxVisibilityStatus(boolean status) {
hideChkbox = status;
notifyDataSetChanged();
}
现在你需要做的是在onBindViewHolder((方法中添加条件,使复选框可见或隐藏。所以代码片段将是——
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
if(hideChkbox)
holder.chkbox.setVisibility(GONE) //Make it invisible instead of GONE if needed.
else
holder.chkbox.setVisibility(VISIBLE)
//Note don't forget to put both if-else condition above otherwise irrelevant result may be seen while scrolling.
..... add your rest of code logic here
}
接下来,当您想要更改适配器类中的可见性时,您需要从您的活动中调用此方法。如果需要隐藏,则传递 true 作为方法参数,否则为 false。因此,来自活动的召唤将是——
edtbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edtbtn.setVisibility(View.INVISIBLE);
donebtn.setVisibility(View.VISIBLE);
edtbtn.setText("EDIT");
// want to apply code here.
adapter.setCheckboxVisibilityStatus(true);
}
});
希望它能解决问题。