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