滚动隐藏滚动视图中所有项目的按钮



我正在使用ScrollView来显示列表。有一个xml,我正在使用它作为项目布局。此布局包含一个按钮,我需要在特定位置显示或隐藏该按钮。现在我的问题是当我滚动视图时,所有按钮都隐藏了。如何防止按钮隐藏特定位置。

我的适配器类如下

package in.nic.bhopal.prosecutordailydiary.adapter;
import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import java.util.List;
import in.nic.bhopal.prosecutordailydiary.R;
import in.nic.bhopal.prosecutordailydiary.activity.DairyOneActivity;
import in.nic.bhopal.prosecutordailydiary.activity.EditFormOneActivity;
import in.nic.bhopal.prosecutordailydiary.helper.RecyclerViewClickListener;
import in.nic.bhopal.prosecutordailydiary.models.Courts;
/**
 * @author Satish Rajput
 * on 10-01-2017.
 */
public class CourtAdapter extends RecyclerView.Adapter<CourtAdapter.MyViewHolder>{
    private Context mContext;
    private List<Courts> courtList;
    private RecyclerViewClickListener itemListener;
    public class MyViewHolder extends RecyclerView.ViewHolder
            implements View.OnClickListener {
        public TextView tvName, tvNoOfCases, tvPW, tvDW;
        public Button btnAdd, btnEdit;
        public MyViewHolder(View view) {
            super(view);
            view.setOnClickListener(this);
            tvName = (TextView) view.findViewById(R.id.tvCourtName);
            tvNoOfCases = (TextView) view.findViewById(R.id.tvNoOfCases);
            tvPW = (TextView) view.findViewById(R.id.tvPW);
            tvDW = (TextView) view.findViewById(R.id.tvDW);
            btnAdd = (Button)view.findViewById(R.id.btnAdd);
            btnAdd.setOnClickListener(this);
            btnEdit = (Button)view.findViewById(R.id.btnEdit);
            btnEdit.setOnClickListener(this);
        }
        @Override
        public void onClick(View v) {
//            ((InstitutesActivity)mContext).showAlert(mContext,"Alert","Clicked item");
//            mContext.startActivity(new Intent(mContext, InspectionActivity.class));
            itemListener.recyclerViewListClicked(v, this.getPosition());
            if(v.getId()==R.id.btnAdd){
                ((DairyOneActivity)mContext).flipper.setDisplayedChild(1);
                ((DairyOneActivity)mContext).courts = courtList.get((int)v.getTag());
            }else if(v.getId()==R.id.btnEdit){
                Intent i = new Intent(mContext, EditFormOneActivity.class);
                String ci = (courtList.get((int)v.getTag())).courtTypeId;
                i.putExtra("CourtId", (courtList.get((int)v.getTag())).courtTypeId);
                mContext.startActivity(i);
            }
        }
    }
    public CourtAdapter(Context mContext, List<Courts> courtList) {
        this.mContext = mContext;
        this.courtList = courtList;
        this.itemListener = (RecyclerViewClickListener)mContext;
    }
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.list_item_courts, parent, false);
        return new MyViewHolder(itemView);
    }
    @Override
    public void onBindViewHolder(final MyViewHolder holder, int position) {
        Courts courts = courtList.get(position);
        holder.tvName.setText("Court Name - "+courts.courtName);
        holder.tvNoOfCases.setText("No. Of Cases - "+courts.noOfCases);
        holder.tvPW.setText("Total Prosecution witness - "+courts.pw);
        holder.tvDW.setText("Total Defence witness - "+courts.dw);
        holder.btnAdd.setTag(position);
        holder.btnEdit.setTag(position);
        if(Integer.parseInt(courts.noOfCases)<=0)
            holder.btnEdit.setVisibility(View.GONE);
    }
    @Override
    public int getItemCount() {
        //return courtList.size();
        return courtList.size();
    }
}

onBindView 方法中的条件隐藏所有按钮。请帮忙。

用这个更新 BindViewHolder 方法 -

if(Integer.parseInt(courts.noOfCases)<=0){
            holder.btnEdit.setVisibility(View.GONE);
        }
        else {
            holder.btnEdit.setVisibility(View.VISIBLE);
        }

在 onBindViewHolder 中,您可以使用 viewHolder.getAdapterPosition() 访问该位置。对于您的情况,它看起来像 -

@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
    Courts courts = courtList.get(position);
    holder.tvName.setText("Court Name - " + courts.courtName);
    holder.tvNoOfCases.setText("No. Of Cases - " + courts.noOfCases);
    holder.tvPW.setText("Total Prosecution witness - " + courts.pw);
    holder.tvDW.setText("Total Defence witness - " + courts.dw);
    holder.btnAdd.setTag(position);
    holder.btnEdit.setTag(position);
    if (Integer.parseInt(courts.noOfCases) <= 0 && holder.getAdapterPostion == <position_you_want_to_hide_btn_at>)
      holder.btnEdit.setVisibility(View.VISIBLE);
    else
      holder.btnEdit.setVisibility(View.GONE);
}

最新更新