on Refresh ViewPagerIndicator dots increased

329 Views Asked by At

the problem is, every time when I'm trying to refresh main activity the ViewPagerIndicator dots are also increasing.here is the screenshots of activity:1) main screen ss 2) on refresh:first refresh screen 3) on again refresh second time refresh screen..I'm not getting where should I make changes..so guide me...thanks in advance..following is the code:

 public class FirstFragment extends Fragment {
     private GridViewAdapter adapter;
     private MyGridView mGridView;
     //ProgressBar myProgressBar;
     ProgressDialog progressDialog;
     private PhotoViewPagerAdapter photoViewPagerAdapter;

     public List < RetroPhoto > product_lists = new ArrayList < > ();

     private JsonArrayRequest request;
     private RequestQueue requestQueue;
     public static FavoriteDatabase favoriteDatabase;
     ViewPager viewPager;
     LinearLayout sliderDotspanel;
     private int dotscount;
     private ImageView[] dots;
     private List < RetroPhoto > retroPhotoList;
     SwipeRefreshLayout swipeRefreshLayout;
     private void populateGridView(List < RetroPhoto > spacecraftList) {
         //mGridView = findViewById(R.id.mGridView);
         mGridView = getView().findViewById(R.id.mGridView);
         adapter = new GridViewAdapter(getContext(), spacecraftList);
         mGridView.setAdapter(adapter);
     }

     @Nullable
     @Override
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
         View rootView = inflater.inflate(R.layout.fragment_first, container, false);
         return rootView;
     }

     @Override
     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
         super.onViewCreated(view, savedInstanceState);
         favoriteDatabase = Room.databaseBuilder(getContext(), FavoriteDatabase.class, "myfavdb").allowMainThreadQueries().build();
         viewPager = (ViewPager) getView().findViewById(R.id.viewPager);
         sliderDotspanel = (LinearLayout) getView().findViewById(R.id.SliderDots);
         swipeRefreshLayout = getView().findViewById(R.id.swipe);
         //  myProgressBar= getView().findViewById(R.id.myProgressBar);
         /*progressDialog = new ProgressDialog(getContext());
         progressDialog.setMessage("Loading....");
         progressDialog.show();*/
         swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
             @Override
             public void onRefresh() {
                 // Your code to make your refresh action
                 // CallYourRefreshingMethod();
                 progressDialog.dismiss();

                 fetchdata();
                 final Handler handler = new Handler();
                 handler.postDelayed(new Runnable() {
                     @Override
                     public void run() {
                         if (swipeRefreshLayout.isRefreshing()) {
                             swipeRefreshLayout.setRefreshing(false);
                         }
                     }
                 }, 1000);
             }
         });
         if (isNetworkConnected()) {
             progressDialog = new ProgressDialog(getContext());
             progressDialog.setMessage("Please wait...");
             progressDialog.setCancelable(false);
             progressDialog.show();

             // startDownload();
         } else {
             new AlertDialog.Builder(getContext())
                 .setTitle("No Internet Connection")
                 .setMessage("It looks like your internet connection is off. Please turn it " +
                     "on and try again")
                 .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                     public void onClick(DialogInterface dialog, int which) {
                         getActivity().finish();
                         startActivity(getActivity().getIntent());
                     }
                 }).setIcon(android.R.drawable.ic_dialog_alert).show();
         }
         fetchdata();

     }
     private void getData() {

         request = new JsonArrayRequest(HI, new com.android.volley.Response.Listener < JSONArray > () {
             @Override
             public void onResponse(JSONArray response) {
                 JSONObject ob;

                 for (int i = 0; i < response.length(); i++) {
                     try {

                         ob = response.getJSONObject(i);
                         RetroPhoto pr = new RetroPhoto(ob.getInt("id"),
                             ob.getString("image"),
                             ob.getString("thumb_image"));

                         product_lists.add(pr);
                     } catch (JSONException e) {
                         e.printStackTrace();
                     }
                 }
                 setupData(product_lists);
             }
         }, new com.android.volley.Response.ErrorListener() {
             @Override
             public void onErrorResponse(VolleyError error) {
                 Toast.makeText(getContext(), "errrrrrrrrrr", Toast.LENGTH_LONG).show();

             }
         });
         requestQueue = Volley.newRequestQueue(getContext());
         requestQueue.add(request);
     }
     private void setupData(List < RetroPhoto > product_lists) {
         adapter = new GridViewAdapter(getContext(), product_lists);
         mGridView.setAdapter(adapter);
     }
     private boolean isNetworkConnected() {
         ConnectivityManager connMgr = (ConnectivityManager) getContext().getSystemService(Context.CONNECTIVITY_SERVICE); // 1
         NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); // 2
         return networkInfo != null && networkInfo.isConnected(); // 3
     }
     private void fetchdata() {
         /*Create handle for the RetrofitInstance interface*/
         GetDataService myAPIService = RetrofitClientInstance.getRetrofitInstance().create(GetDataService.class);

         Call < List < RetroPhoto >> call = myAPIService.getAllPhotos();
         call.enqueue(new Callback < List < RetroPhoto >> () {

             @Override
             public void onResponse(Call < List < RetroPhoto >> call, Response < List < RetroPhoto >> response) {
                 //        myProgressBar.setVisibility(View.GONE);
                 progressDialog.dismiss();
                 retroPhotoList = response.body();
                 populateGridView(retroPhotoList);
                 getData();
                 PhotoViewPagerAdapter viewPagerAdapter = new PhotoViewPagerAdapter(getContext(), retroPhotoList);

                 viewPager.setAdapter(viewPagerAdapter);
                 dotscount = viewPagerAdapter.getCount();
                 dots = new ImageView[dotscount];

                 for (int i = 0; i < dotscount; i++) {

                     dots[i] = new ImageView(getContext());
                     dots[i].setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.page_indicator_unselected));


                     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);

                     params.setMargins(8, 0, 8, 0);

                     sliderDotspanel.addView(dots[i], params);

                 }

                 dots[0].setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.page_indicator_selected));

                 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                     @Override
                     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                     }

                     @Override
                     public void onPageSelected(int position) {

                         for (int i = 0; i < dotscount; i++) {
                             dots[i].setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.page_indicator_unselected));
                         }

                         dots[position].setImageDrawable(ContextCompat.getDrawable(getContext(), R.drawable.page_indicator_selected));

                     }

                     @Override
                     public void onPageScrollStateChanged(int state) {

                     }
                 });
             }

             @Override
             public void onFailure(Call < List < RetroPhoto >> call, Throwable throwable) {
                 Log.d("url", "error");
             }
         });
     }
 }

PhotoViewPagerAdapter:

public class PhotoViewPagerAdapter extends PagerAdapter {
    private Context context;
    private LayoutInflater layoutInflater;
    //private Integer [] images={R.drawable.one,R.drawable.four,R.drawable.three,R.drawable.four};
    private List < RetroPhoto > list_data;

    public PhotoViewPagerAdapter(Context context, List < RetroPhoto > list_data) {
        this.context = context;
        this.list_data = list_data;
    }


    @Override
    public boolean isViewFromObject(@NonNull final View view, @NonNull Object o) {
        return view == o;

    }

    @Override
    public int getCount() {
        return 3;
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, final int position) {
        layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.model2, null);
        ImageView img = view.findViewById(R.id.spacecraftImageView2);
        Picasso.with(context).load(list_data.get(position).getImage()).into(img);

        ViewPager viewPager = (ViewPager) container;
        viewPager.addView(view);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(context, ViewImage.class);
                i.putExtra("Title", list_data.get(position).getImage());

                context.startActivity(i);
            }
        });
        //return true;
        return view;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        ViewPager viewPager = (ViewPager) container;
        View view = (View) object;
        viewPager.removeView(view);

    }
}

layout:

<?xml version="1.0" encoding="utf-8"?>
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipe"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
tools:context=".MainActivity"
xmlns:android="http://schemas.android.com/apk/res/android"
android:scrollbars="vertical">

<androidx.viewpager.widget.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="150dp"
    android:layout_marginBottom="8dp"/>


<com.tbuonomo.viewpagerdotsindicator.WormDotsIndicator
    android:id="@+id/SliderDots"
    android:layout_below="@+id/viewPager"
    android:orientation="horizontal"
   android:layout_gravity="center"
    android:layout_width="match_parent"
    android:layout_height="15dp"
    app:dotsColor="@color/cardview_dark_background"
    app:dotsStrokeColor="@color/cardview_dark_background"
    app:dotsCornerRadius="8dp"
    app:dotsSize="16dp"
    app:dotsSpacing="4dp"
    app:dotsStrokeWidth="2dp"
  />
<com.example.pubimg.MyGridView
    android:id="@+id/mGridView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:numColumns="2"
    android:adjustViewBounds="true"

    android:columnWidth="90dp"
    android:verticalSpacing="-2dp"
    android:horizontalSpacing="-10dp"
    android:stretchMode="columnWidth"
    android:scrollbars="vertical"
    android:fastScrollEnabled="true"
    />
   </LinearLayout>
   </ScrollView>
    </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

here is the ss:enter image description here

1

There are 1 best solutions below

2
Vikas Rai On

dotcount variable is global everytime you refresh it increases by 3. so make this a local variable