2017-12-22 13 views
-2

Google지도 및 클러스터 데이터가 있습니다. 일부 클러스터를 클릭하면 수평 recyclerview가 표시됩니다. 나는 cardView에서 다음 또는 이전 단추 인 imageButton을가집니다. 카드를 클릭하면 다음 위치로 스크롤됩니다. 완벽하게 작동하지만 한 가지 문제가 있습니다.recyclerView에서 가시성 위젯을 설정하는 방법

private void nextImageButtonAction(final ViewHolder holder, final int position, MyClusterMarkerMapItem cluster){ 
       if(position == clusterDataList.size()-1){ 
        Log.i("position", "position: " + position + " visibility GONE for next"); 
        holder.nextImageButton.setVisibility(View.GONE); 
       }else { 
        holder.nextImageButton.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          int currentPosition = position; 
          currentPosition = currentPosition + 1; 
          // Log.i("pos", "currpos " + position + " nextPos " + currentPosition); 
          recyclerView.smoothScrollToPosition(currentPosition++); 
         } 

        }); 
       } 
    } 

    private void previousImageButtonAction(final ViewHolder holder, final int position, MyClusterMarkerMapItem cluster) { 
     if (position == 0) { 
      Log.i("position", "position: " + position + " visibility GONE for prev"); 
      holder.previousImageButton.setVisibility(View.GONE); 
     } else { 
      holder.previousImageButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        int currentPosition = position; 
        currentPosition = currentPosition - 1; 
        //Log.i("pos", "currpos " + position + " nextPos " + currentPosition); 
        recyclerView.smoothScrollToPosition(currentPosition++); 
       } 
      }); 
     } 
    } 

나는이 방법을 실행합니다 :

public void onBindViewHolder(final ViewHolder holder, final int position) {..My Method} 

그러나 첫째로하여 ImageButton 사라 내 첫 cardView 마지막 CardView는 다음과 같이 사라지다에 내가 설정 가시성을하려고이 이미지 버튼을 말았어야 cardView뿐만 아니라 처음 또는 마지막이 아닌 cardView에도 있으며, 마지막 cardview에는 이전 및 다음 이미지 버튼이 없지만 이전 이미지 버튼이 있어야합니다. 그래서 내가 처음 대신에 모든 cardView 옆 있고 이전 이미지 버튼 수는 옆에 있어야하며 마지막에만 이전을

내 어댑터보다이 방법 :

public class ClusterInfoWindow extends Fragment { 
    private MyClusterMarkerMapItem clusterData; 
    private List<MyClusterMarkerMapItem> clusterDataList; 
    public void setClusterData(MyClusterMarkerMapItem clusterData) { 
     clusterDataList = new ArrayList<>(); 
     this.clusterData = clusterData; 
    } 
    public void setClusterDataList(List<MyClusterMarkerMapItem> clusterDataList) { 
     this.clusterDataList = new ArrayList<>(clusterDataList); 
    } 
    private RecyclerView recyclerView; 
    private RecyclerView.Adapter adapterRecyclerView; 
    private RecyclerView.LayoutManager layoutManager; 

    private View rootView; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     rootView = inflater.inflate(R.layout.fragment_info_window_marker_map, container, false); 
     setUpCardView(rootView); 
     return rootView; 
    } 
    private void setUpCardView(View rootView){ 
     recyclerView = rootView.findViewById(R.id.recyclerViewInfoWindowMarker); 
     layoutManager = new LinearLayoutManager(rootView.getContext(),LinearLayoutManager.HORIZONTAL,false); //horizontal 
     recyclerView.setLayoutManager(layoutManager); 
     recyclerView.setHasFixedSize(true); 
     adapterRecyclerView = new AdapterRecyclerView(getActivity()); 
     recyclerView.setAdapter(adapterRecyclerView); 
    } 

    class AdapterRecyclerView extends RecyclerView.Adapter<AdapterRecyclerView.ViewHolder> { 
     private Context context; 
     public AdapterRecyclerView(Context context){ 
      this.context = context; 
     } 
     @Override 
     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_for_info_window_map,parent,false); 
      ViewHolder viewHolder = new ViewHolder(view); 
      return viewHolder; 
     } 

     @Override 
     public void onBindViewHolder(final ViewHolder holder, final int position) { 
//some function, some i put above in this post 
} 
@Override 
     public int getItemCount() { 
      int itemCount = 0; 
      if (clusterDataList.size() == 0) 
       itemCount = 1; 
      else if(clusterDataList.size() > 0) 
       itemCount = clusterDataList.size(); 
      return itemCount; 
     } 
     public class ViewHolder extends RecyclerView.ViewHolder{ 
      private ImageButton nextImageButton; 
      private ImageButton previousImageButton; 

      public ViewHolder(View itemView) { 
       super(itemView); 

       nextImageButton = itemView.findViewById(R.id.cardViewNext); 
       previousImageButton = itemView.findViewById(R.id.cardVievPrevious); 

      } 
     } 

    } 

} 

답변

0

그냥 else 문에 holder.nextImageButton.setVisibility(View.VISIBLE); 추가를

왜? :
RecyclerView가보기를 재사용하기 때문입니다. 보기가 화면에서 벗어나면 다음 목록 항목을 나타 내기 위해 맨 아래로 이동합니다. 그리고 버튼을 숨겨서 자동으로 표시되지 않으므로 수동으로해야합니다.