如何处理回收器视图项在其自己的活动中设置可见性



我的适配器文件 在这些我声明布尔值和一个函数,即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);
    }
});

希望它能解决问题。

最新更新