View pager first and second fragment data is not updating when data changed in android?
Asked Answered
E

2

1

i am using view pager (dynamic) for showing data from service. It is working fine but whenever i called the service again, the data in the view pager need to refresh and updating with new data (from service).

All the fragments in view pager are refreshing with new data but first two fragment of view pager are not updating with new data, those two fragments (first and second) are showing with previous data only. please any one help me.

my code:

RechargeplansActivity.java:

public class RechargeplansActivity  extends FragmentActivity /*implements RechargePlansFragment.UserInterface*/ {
    static final String TAG = RechargeplansActivity.class.getSimpleName();
    SectionsPagerAdapter mSectionsPagerAdapter;
    ViewPager mViewPager;
    Intent intent;
    private ArrayList<String> mPlanNamesList;
    private ArrayList<BrowsePlan> mBrowsePlansList;
    TextView tx_network;
    Dialog message_dialg;
    Context context;
    String operatorid,circleid;

    Map<String, ArrayList<BrowsePlan>> mBrowsePlansMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_rechargeplans);

        context = this;

        intent = getIntent();
        setPlan_types(new ArrayList<String>());
        setBrowseplans(new ArrayList<BrowsePlan>());
        mBrowsePlansMap = new HashMap<String, ArrayList<BrowsePlan>>();
        //db = DatabaseHandler.getInstance(getApplicationContext());
        initUI();




        operatorid=intent.getStringExtra("op_id");
        circleid=intent.getStringExtra("cir_id");



        executeBrowsePlans();
        tx_network.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Browseplans_dialog();
            }
        });


    }

    /* It is used for initialization */
    private void initUI() {
        tx_network = (TextView) findViewById(R.id.tx_network);

        // Set up the ViewPager with the sections adapter.
        mViewPager = (ViewPager) findViewById(R.id.pager);
        //iv_back = (ImageView) findViewById(R.id.iv_back);
        // Create the adapter that will return a fragment
        mSectionsPagerAdapter = new SectionsPagerAdapter(
                getSupportFragmentManager());

        mViewPager.setAdapter(mSectionsPagerAdapter);

    }


    /* Data getting from the service */
    private void executeBrowsePlans() {
        ServiceClient serviceClient = ServiceUtil.getServiceClient();



        mProgressDialog.show();
        serviceClient.getPlans_v2(operatorid, circleid, getshowPlansCallback);

    }



    /**
     * @return the al_browseplans
     */
    public ArrayList<BrowsePlan> getBrowseplans(String key) {
        if (key == null && !mPlanNamesList.contains(key)) {
            return new ArrayList<BrowsePlan>();
        }
        return mBrowsePlansMap.get(key);
    }

    /**
     * @return the al_browseplans
     */
    public ArrayList<BrowsePlan> getBrowseplans() {
        return mBrowsePlansList;
    }

    /**
     * @param al_browseplans
     *            the al_browseplans to set
     */
    public void setBrowseplans(ArrayList<BrowsePlan> al_browseplans) {
        this.mBrowsePlansList = al_browseplans;
    }

    protected void traceD(String msg) {

        // Log.d(TAG, msg);
    }

    /**
     * @return the plan_types
     */
    public ArrayList<String> getPlan_types() {
        return mPlanNamesList;
    }

    /**
     * @param plan_types
     *            the plan_types to set
     */
    public void setPlan_types(ArrayList<String> plan_types) {
        Log.v("Tag_plantype", "" + plan_types.size());

        this.mPlanNamesList = plan_types;
    }

    Callback<JsonObject> getshowPlansCallback = new Callback<JsonObject>() {

        @Override
        public void failure(RetrofitError arg0) {
            // TODO Auto-generated method stub
            dismissProgress();
        }

        @Override
        public void success(JsonObject resultUserInfo, Response arg1) {
            traceD(" Browse Plans" + resultUserInfo.toString());
            dismissProgress();



            // String
            // planTypes=resultUserInfo.get("Plantypes").getAsString();
            // mPlanNamesList.addAll(Arrays.asList(planTypes.split(",")));
            // mSectionsPagerAdapter.notifyDataSetChanged();
            if (resultUserInfo.has("Status")) {
                String Status = resultUserInfo.get("Status")
                        .getAsString();
                if(Status.equalsIgnoreCase("false")){
                    dismissProgress();
                }
                else if(Status.equalsIgnoreCase("true")) {

                    JsonArray array = resultUserInfo.get("Plans")
                            .getAsJsonArray();

                    Type type = new TypeToken<ArrayList<BrowsePlan>>() {
                    }.getType();
                    Gson gson = new Gson();

                    getBrowseplans().addAll(
                            (Collection<? extends BrowsePlan>) gson.fromJson(array,
                                    type));
                    AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {

                        @Override
                        protected Void doInBackground(Void... params) {
                            Log.v("TAG_PLANS_1",""+mBrowsePlansList.size());

                            if (mBrowsePlansList.size() > 0) {
                                Log.v("TAG_PLANS",""+mBrowsePlansList);


                                for (BrowsePlan bl : mBrowsePlansList) {
                                    if (mBrowsePlansMap.get(bl.getPlanType()) == null) {
                                        mBrowsePlansMap.put(bl.getPlanType(), new ArrayList<BrowsePlan>());
                                    }
                                    mBrowsePlansMap.get(bl.getPlanType()).add(bl);
                                    //setBrowseplans(mBrowsePlansMap.get(bl.getPlanType()));
                                    Log.v("TAG_PLANS_map", "" +  (bl.getPlanType().toString())
                                    );
                                }




                            }


                            // mBrowsePlansList.clear();
                            for (Map.Entry<String, ArrayList<BrowsePlan>> entry : mBrowsePlansMap.entrySet()) {

                                mPlanNamesList.add(entry.getKey());
                            }
                            return null;
                        }

                        protected void onPostExecute(Void result) {

                            for(BrowsePlan bp: getBrowseplans()){
                                System.out.println("plan type post execute: "+bp.getPlanType()+"value: "+bp.getPlanValue());
                            }

                           // mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

                          //  mViewPager.setAdapter(mSectionsPagerAdapter);

                            mSectionsPagerAdapter.notifyDataSetChanged();
                            //mViewPager.setCurrentItem(4);
                        }

                        ;

                    };
                    task.execute();
                }

            }

        }
    };

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();

        dismissProgress();
    }

   /* @Override
    public void setBrowsePlansToRefresh(RechargePlansFragment.BrowsePalnsAdapter adapter, ListView listView) {
        //adapter = new BrowsePlansAdapter();

    }

    @Override
    public void setData(ArrayList<BrowsePlan> plans) {
        mBrowsePlansList.clear();
        mBrowsePlansList = plans;
    }
*/

    /**
     * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
     * one of the sections/tabs/pages.
     */
    public class SectionsPagerAdapter extends FragmentPagerAdapter {
        private boolean doNotifyDataSetChangedOnce = false;

        public SectionsPagerAdapter(FragmentManager fragmentManager) {
            super(fragmentManager);
        }

        // Returns total number of pages
        @Override
        public int getCount() {
            if (doNotifyDataSetChangedOnce) {
                doNotifyDataSetChangedOnce = false;
                notifyDataSetChanged();
            }
            return getPlan_types().size();
        }

        // Returns the fragment to display for that page
        @Override
        public Fragment getItem(int position) {

            return RechargePlansFragment
                    .newInstance(mPlanNamesList.get(position));
        }

        // Returns the page title for the top indicator
        public CharSequence getPageTitle(int position) {
            return getPlan_types().get(position);
        }

        public int getItemPosition(Object object) {
            return POSITION_NONE;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {

            return super.instantiateItem(container, position);
        }

        @Override
        public long getItemId(int position) {
            return super.getItemId(position);
        }
    }

    @Override
    public void onActivityResult(int arg0, int arg1, Intent arg2) {

        setResult(arg1, arg2);
        traceD("onActivityResult ");
        finish();
        super.onActivityResult(arg0, arg1, arg2);
    }

    void showProgress(int msgID) {

        dismissProgress();
        if (mProgressDialog == null) {
            mProgressDialog = new ProgressDialog(this);
        }
        if (mProgressDialog != null && !mProgressDialog.isShowing()) {

            mProgressDialog.setMessage(getResources().getString(msgID));
            mProgressDialog.show();
        }

    }

    void dismissProgress() {

        if (mProgressDialog != null && mProgressDialog.isShowing()) {

            mProgressDialog.dismiss();
        }
    }
    @Override
    public void onResume() {
        super.onResume();
        mSectionsPagerAdapter.notifyDataSetChanged();
    }
    void Browseplans_dialog( ) {

        message_dialg = new Dialog(this);
        Window window = message_dialg.getWindow();
        message_dialg.requestWindowFeature(Window.FEATURE_NO_TITLE);
        message_dialg.getWindow().setBackgroundDrawable(new ColorDrawable(0));
        message_dialg.setContentView(R.layout.activity_selectdialog);
      Button  viewplans=(Button)message_dialg.findViewById(R.id.viewplans);
        viewplans.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                operatorid = "5";
                circleid="1";
                mPlanNamesList.clear();
                mBrowsePlansList.clear();
                mBrowsePlansMap.clear();



                executeBrowsePlans();
                message_dialg.dismiss();
            }
        });


        window.setLayout(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        window.setGravity(Gravity.CENTER);


        message_dialg.setCancelable(true);



        message_dialg.show();


    }

}

RechargePlansFragment .java:

public class RechargePlansFragment extends Fragment {
    static final String ARG_KEY = "key";
    static final String TAG = RechargePlansFragment.class.getSimpleName();
    // Store instance variables
    ArrayList<BrowsePlan> mBrowseplans ;//= new ArrayList<BrowsePlan>();
    BrowsePalnsAdapter browsePlansAdapter;
    ListView lv_browseplans;
    View rootView;
    static String key;
    boolean flag = false;
    SharedPreferences m_sharedPreference;
    SharedPreferences.Editor m_editor;
    static  UserInterface objUserInterface;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
      //  objUserInterface = (UserInterface)activity;
    }

    public interface UserInterface{
        public void setBrowsePlansToRefresh(BrowsePalnsAdapter adapter, ListView listView);
       // public void setData(ArrayList<BrowsePlan> plans);
    }

    // newInstance constructor for creating fragment with arguments
    public static RechargePlansFragment newInstance(String key) {
        RechargePlansFragment fragmentFirst = new RechargePlansFragment();
        Bundle args = new Bundle();
        args.putString(ARG_KEY, key);

        //objUserInterface.setBrowsePlansToRefresh();
        fragmentFirst.setArguments(args);
        return fragmentFirst;
    }

    // Store instance variables based on arguments passed
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //((MobeRechargeApplication)getActivity().getApplication()).sendScreenName("Browse Plans");
        if (getArguments() != null) {
            key = getArguments().getString(ARG_KEY);
        }
        mBrowseplans = new ArrayList<BrowsePlan>();
        mBrowseplans.addAll(((RechargeplansActivity) getActivity()).getBrowseplans(key));
        Log.v("TAG_KEYYYYY",""+key + "  " +mBrowseplans.size()+ " planvalue " +mBrowseplans.get(0).getPlanValue());
        traceD(" key :" + key);



    }

    void traceD(String msg) {

        //Log.d(TAG, msg);
    }

    // Inflate the view for the fragment based on layout XML
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.fragment_browseplans, container,
                false);
        m_sharedPreference = getActivity().getSharedPreferences("save_details", Context.MODE_PRIVATE);
        m_editor = m_sharedPreference.edit();


        System.out.println("browse size:" + mBrowseplans.size());
        for(int i=0; i<mBrowseplans.size();i++){
            System.out.println(" Recharge plan type: "+mBrowseplans.get(i).getPlanType());
        }



        initUI();
        browsePlansAdapter = new BrowsePalnsAdapter(mBrowseplans);
        lv_browseplans.setAdapter(browsePlansAdapter);
        return rootView;
    }

    @Override
    public void onResume() {
        super.onResume();
        browsePlansAdapter.notifyDataSetChanged();
    }

    private void initUI() {
        lv_browseplans = (ListView) rootView.findViewById(R.id.lv_browseplans);
    }

    @SuppressWarnings("hiding")
    class BrowsePalnsAdapter extends BaseAdapter {
        ArrayList<BrowsePlan> allPlans;

        public BrowsePalnsAdapter(ArrayList<BrowsePlan> bplans){
            this.allPlans = bplans;

        }

        @Override
        public int getCount() {
            return allPlans.size();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public int getViewTypeCount() {

            return getCount();
        }

        @Override
        public int getItemViewType(int position) {

            return position;
        }



        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            View view;
            ViewHolder viewHolder;
            Typeface custom_regular = Typeface.createFromAsset(getActivity().getAssets(),
                    "fonts/OpenSans-Regular.ttf");
            if (convertView == null) {
                viewHolder = new ViewHolder();
                view = LayoutInflater.from(getActivity()).inflate(
                        R.layout.plans_list_adapter, parent, false);
                viewHolder.tx_price = (TextView) view
                        .findViewById(R.id.planvalue_txt);
                viewHolder.tx_talktime = (TextView) view
                        .findViewById(R.id.plantalktime_txt);
                viewHolder.tx_validity = (TextView) view
                        .findViewById(R.id.planvalidity_txt);
                viewHolder.tx_plansdetails = (TextView) view
                        .findViewById(R.id.plansdetails_txt);
                viewHolder.tx_price.setTypeface(custom_regular);
                viewHolder.tx_talktime.setTypeface(custom_regular);
                viewHolder.tx_validity.setTypeface(custom_regular);
                viewHolder.tx_plansdetails.setTypeface(custom_regular);
                viewHolder.linear=(LinearLayout) view.findViewById(R.id.linear);

                convertView = view;
                convertView.setTag(viewHolder);
            }
            viewHolder = (ViewHolder) convertView.getTag();
//            System.out.println("n: "+ bbplans.get(position).   );
            viewHolder.tx_price.setText("RS." + allPlans.get(position).getPlanValue());
            viewHolder.tx_validity.setText(allPlans.get(position)
                    .getPlanValidity());
            viewHolder.tx_plansdetails.setText(allPlans.get(position)
                    .getPlansDetails());
            Log.v("TAG_TALKTIME", "" +allPlans.get(position)
                    .getPlanTalktime());
            viewHolder.tx_talktime.setText(allPlans.get(position)
                    .getPlanTalktime());
            viewHolder.linear.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    m_editor.putString("amount", allPlans.get(position).getPlanValue());
                    m_editor.commit();
                    getActivity().finish();
                }
            });

            return convertView;
        }

    }

    class ViewHolder {
        TextView tx_price, tx_talktime, tx_validity, tx_plansdetails;
        LinearLayout linear;

    }

}

BrowsePlan.java:

public class BrowsePlan {

    @Expose
    private String PlanType;
    @Expose
    private String PlanValidity;

    public String getPlanTalktime() {
        return PlanTalktime;
    }

    public void setPlanTalktime(String planTalktime) {
        PlanTalktime = planTalktime;
    }

    @Expose
    private String PlanTalktime;
    @Expose
    private String PlansDetails;
    @Expose
    private String RCType;

    public String getPlanValue() {
        return PlanValue;
    }

    public void setPlanValue(String planValue) {
        PlanValue = planValue;
    }

    public String getSortOrder() {
        return SortOrder;
    }

    public void setSortOrder(String sortOrder) {
        SortOrder = sortOrder;
    }

    public String getRCType() {
        return RCType;
    }

    public void setRCType(String RCType) {
        this.RCType = RCType;
    }

    public String getPlansDetails() {
        return PlansDetails;
    }

    public void setPlansDetails(String plansDetails) {
        PlansDetails = plansDetails;
    }



    public String getPlanValidity() {
        return PlanValidity;
    }

    public void setPlanValidity(String planValidity) {
        PlanValidity = planValidity;
    }

    public String getPlanType() {
        return PlanType;
    }

    public void setPlanType(String planType) {
        PlanType = planType;
    }

    @Expose
    private String PlanValue;
    @Expose
    private String SortOrder;



}

executeBrowsePlans(); is the method for calling web service.

Erythro answered 8/10, 2015 at 9:41 Comment(5)
view pagers are created dynamically, but every time first two view pagers data is not changing remaining all view pagers data is changing...i tested that,Erythro
please any one help meErythro
It seems you have found a solution now which is good! Just a suggestion for the future though - perhaps you should try striping your code down to the bare minimum needed to demonstrate the problem. This question has a lot of code for somebody read through and try and understand before they can help.Kado
ok Luke Seleman. I Will follow your suggestion. Thanks alot for your suggestion and response to post.:)Erythro
github.com/pchauhan/RefreshFragementViewPagerIdonna
E
15

Just changed to FragmentStatePagerAdapter instead of FragmentPagerAdapter in SectionsPagerAdapter class

It is working now.

Erythro answered 8/10, 2015 at 11:45 Comment(2)
@kartheeki j what is the reason behind that i have also faced same problem.Revoice
After one week of struggle, I found a working answer here... thanx man..Oat
W
1

The view/fragment in focus might not be updating when adapter refreshes. Try this:

int currentPstn = lv_browseplans.getCurrentItem();

lv_browseplans.setAdapter(browsePlansAdapter);

lv_browseplans.setCurrentItem(currentPstn);
Wisecrack answered 8/10, 2015 at 10:25 Comment(2)
lv_browseplan is the listiew. there was no getcurrentitem method for listviewErythro
@kartheekij, I thought its the ViewpagerWisecrack

© 2022 - 2024 — McMap. All rights reserved.