Reputation: 261
I am using a ScrollView to show a list. There is an xml which i am using as item layout. this layout consist a button which i need to show or hide for specific positions. Now my problem is when i scroll the view all buttons goes hidden. How can i prevent button from hiding for specific position.
My Adapter class is as bellow
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();
}
}
The condition in onBindView method hides all button. Please help.
Upvotes: 0
Views: 61
Reputation: 33
In your onBindViewHolder, you can access the position using viewHolder.getAdapterPosition(). For your case, it would look like -
@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);
}
Upvotes: 1
Reputation: 544
Update onBindViewHolder method with this -
if(Integer.parseInt(courts.noOfCases)<=0){
holder.btnEdit.setVisibility(View.GONE);
}
else {
holder.btnEdit.setVisibility(View.VISIBLE);
}
Upvotes: 3