Android fragments 在我的ListFragment中重复的数据

Android fragments 在我的ListFragment中重复的数据,android-fragments,Android Fragments,我遇到了一个问题,我的列表片段由Volley Library提供,并由ViewPager托管!所以,当我滑动follow Fragment并返回到上一个ListFragment时,数据会再次重复!为什么?请帮帮我 这是我的代码: 绑定代码ListFragment: public class AllConferencesFragment extends ListFragment { // Variables final String URL_ALL_CONFERENCES = "http://

我遇到了一个问题,我的
列表片段
由Volley Library提供,并由
ViewPager
托管!所以,当我滑动follow 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);
}
公共类AllConferencesFragment扩展了ListFragment{
//变数
最终字符串URL\u所有会议=”http://192.168.43.246/android_christEvent/all_events_conference.php";
//最终字符串URL\u所有会议=”http://7avecdieu.org/android_christEvent/all_events_conference.php";
//私有静态字符串标记=ConferenceActivity.class.getSimpleName();
列表视图列表视图;
视图;
List eventLists=new ArrayList();
CustomListEventAdapter CustomListEventAdapter;
CircularProgressView CircularProgressView;
//承包商
公共所有会议片段(){
}
//破片创作
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
//拉维创作
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.u框架,容器,假);
circularProgressView=(circularProgressView)view.findViewById(R.id.circular\u进度);
返回视图;
}
//碎片包装活动
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
circularProgressView.setVisibility(View.VISIBLE);
circularProgressView.startAnimation();
getListView();
//listView=(listView)view.findViewById(R.id.list);
customListEventsAdapter=新的customListEventsAdapter(getActivity(),EventList);
//setAdapter(customListEventsAdapter);
setListAdapter(CustomListEventAdapter);
//在检查时,请参阅
缓存缓存=AppController.getInstance().getRequestQueue().getCache();
Cache.Entry=Cache.get(URL\u所有会议);
if(条目!=null){
circularProgressView.setVisibility(View.VISIBLE);
//在参数传递过程中需要缓存的数据包(Parcours des données de la cache de cette url passée en Parameter)
试一试{
字符串数据=新字符串(entry.data,“UTF-8”);
试一试{
parseJsonFeed(新的JSONObject(数据));
//通知列表适配器的数据更改
customListEventsAdapter.notifyDataSetChanged();
}
捕获(JSONException e){
e、 printStackTrace();
}
}
捕获(不支持的编码异常e){
e、 printStackTrace();
}
}
否则{
JsonObjectRequest jsonReq=新的JsonObjectRequest(Request.Method.GET,
URL_所有会议,
无效的
新的Response.Listener(){
@凌驾
公共void onResponse(JSONObject响应){
d(“Resultats-->”,Response:+Response.toString());
if(响应!=null){
parseJsonFeed(响应);
//通知列表适配器的数据更改
customListEventsAdapter.notifyDataSetChanged();
}
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
d(“Resultats-->”,Error:+Error.getMessage());
//progressBar.setVisibility(View.GONE);
circularProgressView.setVisibility(View.GONE);
}
});
//将请求添加到截击请求队列
AppController.getInstance().addToRequestQueue(jsonReq);
}
//乌克里克乌尼姆河畔
getListView().setOnItemClickListener(新的AdapterView.OnItemClickListener()){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Intent Intent=new Intent(getContext(),DetailsEventsActivity.class);
意图。额外(“位置”,位置);
星触觉(意向);
}
});
}
/**
*解析json响应并将数据传递给事件视图列表适配器
**/
私有void parseJsonFeed(JSONObject响应){
试一试{
JSONArray eventArray=response.getJSONArray(“事件”);
对于(int i=0;i
}

截击应用程序代码:

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);
    }
}
公共类AppController扩展应用程序{
公共静态最终字符串标记=AppController.class.getSimpleName();
私有请求队列mRequestQueue;
私有图像加载器;
专用静态应用控制器;
@凌驾
public void onCreate(){
super.onCreate();
mInstance=这个;
}
公共静态同步AppController getInstance(){
回报率;
}
公共请求队列getRequestQueue(){
if(mRequestQueue==null){
    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);
    }
}
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);
    }

}