2017-01-13 6 views
0

ScrollViewを使用してリストを表示しています。私はアイテムのレイアウトとして使用しているXMLがあります。このレイアウトは、特定の位置を表示または非表示にする必要があるボタンで構成されています。今私の問題は、すべてのボタンが隠れているビューをスクロールするときです。特定の位置にボタンが隠れないようにするにはどうすればいいですか?ScrollViewのすべての項目のスクロールボタンを表示

私のアダプタクラスがonBindView方法のように怒鳴る

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(); 
    } 

} 

条件では、すべてのボタンが非表示になります。助けてください。これで

答えて

3

更新onBindViewHolder方法 - あなたのonBindViewHolderで

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

は、あなたがviewHolder.getAdapterPositionを使用して位置をアクセスすることができます()。 ((Integer.parseInt(courts.noOfCases)> 0 && holder.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); 
} 
+0

おかげで、私は、コードのあなたのラインからヒントを得ている場合、次のように解決策を見つける - あなたのケースのために、それは次のようになります。 )==位置) holder.btnEdit.setVisibility(View.VISIBLE); else holder.btnEdit.setVisibility(View.GONE); –

+0

お寄せいただきありがとうございます。それが助けられたら、答えを受け入れられたものとしてマークし、それをアップボートしてください。正しい答えを反映するように答えを編集します。 :) – Nairiya

関連する問題