数据库在我的ListFragment中重复出现

时间:2015-11-17 16:38:11

标签: android-fragments

我遇到了Volley图书馆提供的ListFragment问题并由ViewPager托管!因此,当我轻扫跟随Fragment并返回到我之前的ListFragment时,数据会再次重复!为什么?请帮我 !

这是我的代码:

绑定代码ListFragment

public class AllConferencesFragment extends ListFragment {


// Variables
final String URL_ALL_CONFERENCES = "http://192.168.43.246/android_christEvent/all_events_conference.php";
//final String URL_ALL_CONFERENCES = "http://7avecdieu.org/android_christEvent/all_events_conference.php";
//private static String TAG = ConferenceActivity.class.getSimpleName();
ListView listView;
View view;
List<Event> eventLists = new ArrayList<Event>();
CustomListEventsAdapter customListEventsAdapter;
CircularProgressView circularProgressView;


// Contructeur
public AllConferencesFragment() {

}


// Creation du fragment
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}


// Creation de la vue
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.conferences_frag, container, false);
    circularProgressView = (CircularProgressView) view.findViewById(R.id.circular_progress);
    return view;
}


// Activité gestionnaire du fragment créé
@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    circularProgressView.setVisibility(View.VISIBLE);
    circularProgressView.startAnimation();
    getListView();
    //listView = (ListView) view.findViewById(R.id.list);
    customListEventsAdapter = new CustomListEventsAdapter(getActivity(), eventLists);
    //listView.setAdapter(customListEventsAdapter);
    setListAdapter(customListEventsAdapter);
    // On check si la cache est vide
    Cache cache = AppController.getInstance().getRequestQueue().getCache();
    Cache.Entry entry = cache.get(URL_ALL_CONFERENCES);
    if (entry != null) {
        circularProgressView.setVisibility(View.VISIBLE);
        // Parcours des données de la cache de cette url passée en parametre
        try {
            String data = new String(entry.data, "UTF-8");
            try {
                parseJsonFeed(new JSONObject(data));
                // notify data changes to list adapater
                customListEventsAdapter.notifyDataSetChanged();
            }
            catch (JSONException e) {
                e.printStackTrace();
            }
        }
        catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
    }
    else {
        JsonObjectRequest jsonReq = new JsonObjectRequest(Request.Method.GET,
                URL_ALL_CONFERENCES,
                null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        VolleyLog.d("Resultats ----> ", "Response: " + response.toString());
                        if (response != null) {
                            parseJsonFeed(response);
                            // notify data changes to list adapater
                            customListEventsAdapter.notifyDataSetChanged();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        VolleyLog.d("Resultats ----> ", "Error: " + error.getMessage());
                        //progressBar.setVisibility(View.GONE);
                        circularProgressView.setVisibility(View.GONE);
                    }
                });
        // Adding request to volley request queue
        AppController.getInstance().addToRequestQueue(jsonReq);
    }
    // Au Cliq sur un iem
    getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Intent intent = new Intent(getContext(), DetailsEventsActivity.class);
            intent.putExtra("position", position);
            startActivity(intent);
        }
    });
}


/**
 * Parsing json reponse and passing the data to event view list adapter
 **/
private void parseJsonFeed(JSONObject response) {
    try {
        JSONArray eventArray = response.getJSONArray("events");
        for (int i = 0; i < eventArray.length(); i++) {
            JSONObject eventObj = (JSONObject) eventArray.get(i);
            Event evt = new Event();
            evt.setPriceEvent(eventObj.getString("event_price"));
            // Image might be null sometimes
            String image = eventObj.isNull("event_thumb") ? null : eventObj.getString("event_thumb");
            evt.setThumbEvent(image);
            evt.setNameEvent(eventObj.getString("event_name"));
            evt.setPlaceEvent(eventObj.getString("event_place"));
            evt.setHourEvent(eventObj.getString("event_hour"));
            evt.setDateEvent(eventObj.getString("event_date"));
            eventLists.add(evt);
        }
        circularProgressView.setVisibility(View.GONE);
    }
    catch (JSONException e) {
        e.printStackTrace();
    }
}


@Override
public void onDestroy() {
    super.onDestroy();
    //progressBar.setVisibility(View.GONE);
}

}

排球申请代码:

public class AppController extends Application {


public static final String TAG = AppController.class.getSimpleName();
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
private static AppController mInstance;


@Override
public void onCreate() {
    super.onCreate();
    mInstance = this;
}


public static synchronized AppController getInstance() {
    return mInstance;
}


public RequestQueue getRequestQueue() {
    if(mRequestQueue == null) {
        mRequestQueue = Volley.newRequestQueue(getApplicationContext());
    }
    return mRequestQueue;
}


public ImageLoader getImageLoader() {
    getRequestQueue();
    if (mImageLoader == null) {
       mImageLoader = new ImageLoader(this.mRequestQueue, new LruBitmapCache());
    }
    return this.mImageLoader;
}


public <T> void addToRequestQueue(Request<T> req, String tag) {
    // Set the default tag if tag is empty
    req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
    getRequestQueue().add(req);
}


public <T> void addToRequestQueue(Request<T> req) {
    req.setTag(TAG);
    getRequestQueue().add(req);
}


public void cancelPendingRequests(Object tag) {
    if (mRequestQueue != null) {
        mRequestQueue.cancelAll(tag);
    }
}

}

我的parseJsonEvent:

    private void parseJsonEvent(JSONObject response) {
    try {
        JSONArray eventArray = response.getJSONArray(TAG_EVENTS);
        // Loop Json node
        for (int i = 0; i < eventArray.length(); i++) {
            JSONObject eventObj = (JSONObject) eventArray.get(i);
            // Create event object
            Event evt = new Event();
            evt.setIdEvent(eventObj.getInt(TAG_EVENT_ID));
            evt.setDateEvent(eventObj.getString(TAG_EVENT_DATE));
            evt.setPriceEvent(eventObj.getString(TAG_EVENT_PRICE));
            evt.setNameEvent(eventObj.getString(TAG_EVENT_NAME));
            evt.setCountryEvent(eventObj.getString(TAG_EVENT_COUNTRY));
            evt.setPlaceEvent(eventObj.getString(TAG_EVENT_PLACE));
            evt.setTypeEvent(eventObj.getString(TAG_EVENT_TYPE));
            // event thumbnail
            String eventUrl = eventObj.isNull(TAG_EVENT_THUMB) ? null : eventObj.getString(TAG_EVENT_THUMB);
            evt.setThumbEvent(eventUrl);
            // Adding in the list object
            eventList.add(evt);
            // notify list view to adding
        }
        adapter.notifyDataSetChanged();
    }
    catch (JSONException e) {
        e.printStackTrace();
    }

}

我的主要活动:

public class ConferenceActivity extends AppCompatActivity {

private Toolbar toolbarConference;
private TabLayout tabLayoutConference;
private ViewPager viewPagerConference;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //Typeface tf = Typeface.createFromAsset(getAssets(), fontPath);
    //getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    toolbarConference = (Toolbar) findViewById(R.id.toolbar_conference);
    setSupportActionBar(toolbarConference);
    viewPagerConference = (ViewPager) findViewById(R.id.viewpager_conference);
    setupViewPager(viewPagerConference);
    tabLayoutConference = (TabLayout) findViewById(R.id.tabs_conference);
    tabLayoutConference.setupWithViewPager(viewPagerConference);
}

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new AllEventsConferenceFragments(), "TOUS");
    adapter.addFragment(new ThisWeekFragment(), "AUJOURD'HUI");
    adapter.addFragment(new TodayEventFragment(), "CETTE SEMAINE");
    adapter.addFragment(new AllEventsConferenceFragments(), "SEMAINE PROCHAINE");
    adapter.addFragment(new ThisWeekFragment(), "CE MOIS CI");
    adapter.addFragment(new TodayEventFragment(), "MOIS PROCHAIN");
    adapter.addFragment(new AllEventsConferenceFragments(), "ANNEE EN COURS");
    viewPager.setAdapter(adapter);
}

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

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

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
}

}

1 个答案:

答案 0 :(得分:0)

public class AllConferencesFragment extends ListFragment {


private boolean loaded = false;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
        if(loaded){
            return;
        }
        loaded = true;
        JsonObjectRequest jsonReq = new JsonObjectRequest(Request.Method.GET,
                URL_ALL_CONFERENCES,
                null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        VolleyLog.d("Resultats ----> ", "Response: " + response.toString());
                        if (response != null) {
                            parseJsonFeed(response);
                            // notify data changes to list adapater
                            customListEventsAdapter.notifyDataSetChanged();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        VolleyLog.d("Resultats ----> ", "Error: " + error.getMessage());
                        //progressBar.setVisibility(View.GONE);
                        circularProgressView.setVisibility(View.GONE);
                    }
                });
        // Adding request to volley request queue
        AppController.getInstance().addToRequestQueue(jsonReq);
    }

}