代码之家  ›  专栏  ›  技术社区  ›  emresancaktar

当我点击第三次时,Android TabActivity调用DestroyView

  •  2
  • emresancaktar  · 技术社区  · 11 年前

    我的应用程序有两个选项卡,工作起来很有魅力。
    但今天我尝试扩展我的选项卡,并添加了第三个选项卡。

    当我点击第三个选项卡时,它会破坏第一个选项卡片段,并在第一个选项卡碎片中调用onDestroyView方法。
    当我点击第二个选项卡时,它不会调用onDestroyView。

    为什么第三个标签会破坏第一个标签?

    我不想让它破坏我的第一视角。
    我如何解决这个问题?

    我的自定义FragmentAdapter类

    package com.esmobileinc.vetmapp;
    
    import android.content.Context;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentPagerAdapter;
    import android.view.ViewGroup;
    
    public class SectionsPagerAdapter extends FragmentPagerAdapter {
    
    Context mContext;
    private Fragment mCurrentFragment;
    
    
    public SectionsPagerAdapter(Context context, FragmentManager fm) {
        super(fm);
        mContext = context;
    }
    
    @Override
    public Fragment getItem(int position) {
        // getItem is called to instantiate the fragment for the given page.
    
        switch (position){
            case 0:
                return new HaritaFragment();
            case 1:
                return new ListeFragment();
            case 2:
                return new ListeFragment();
        }
        return null;
    }
    
    public Fragment getCurrentFragment() {
        return mCurrentFragment;
    }
    //...
    @Override
    public void setPrimaryItem(ViewGroup container, int position, Object object) {
        if (getCurrentFragment() != object) {
            mCurrentFragment = ((Fragment) object);
        }
        super.setPrimaryItem(container, position, object);
    }
    
    
    @Override
    public int getCount() {
        return 3;
    }
    
    /*@Override
    public CharSequence getPageTitle(int position) {
        Locale l = Locale.getDefault();
    
        switch (position) {
            case 0:
                return mContext.getString(R.string.title_section1).toUpperCase(l);
            case 1:
                return mContext.getString(R.string.title_section2).toUpperCase(l);
        }
        return null;
    }*/
    
    public int getIcon(int position){
    
        switch (position){
    
            case 0:
            return R.drawable.harita_tab_icon;
            case 1:
            return R.drawable.liste_tab_icon;
            case 2:
            return R.drawable.harita_tab_icon;
        }
            return R.drawable.harita_tab_icon;
    }
    }
    

    这是我的主要活动。

    package com.esmobileinc.vetmapp;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentTransaction;
    import android.support.v4.view.ViewPager;
    import android.support.v7.app.ActionBar;
    import android.view.Menu;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    
    import com.instabug.library.Instabug;
    import com.instabug.wrapper.support.activity.InstabugActionBarActivity;
    
    
    public class MainActivity extends InstabugActionBarActivity implements ActionBar.TabListener {
    
    SectionsPagerAdapter mSectionsPagerAdapter;
    ViewPager mViewPager;
    FragmentManager manager;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        manager = getSupportFragmentManager();
    
        // Set up the action bar.
        final ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setLogo(R.drawable.nav_logo);
        getSupportActionBar().setDisplayUseLogoEnabled(true);
        getSupportActionBar().setTitle("");
    
        mSectionsPagerAdapter = new SectionsPagerAdapter(this, getSupportFragmentManager());
    
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mSectionsPagerAdapter);
        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                actionBar.setSelectedNavigationItem(position);
            }
        });
    
        for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
            actionBar.addTab(
                    actionBar.newTab()
                            //.setText(mSectionsPagerAdapter.getPageTitle(i))
                            .setIcon(mSectionsPagerAdapter.getIcon(i))
                            .setTabListener(this));
        }
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_main, menu);
        return super.onCreateOptionsMenu(menu);
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_mail) {
    
            Instabug.getInstance().setCommentFieldHint(getString(R.string.veterinerbildir_comment));
            Instabug.getInstance().enableEmailField(true,true);
            Instabug.getInstance().setCommentRequired(true);
    
            Instabug.getInstance().invokeFeedbackProcess(Instabug.INSTABUG_FEEDBACK_FEEDBACK);
    
            return true;
        }
    
        else if (id == R.id.action_about){
    
            Intent intent = new Intent(this,InfoActivity.class);
            startActivity(intent);
        }
    
        return super.onOptionsItemSelected(item);
    }
    
    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        mViewPager.setCurrentItem(tab.getPosition());
    }
    
    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    }
    
    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    }
    }
    

    这是我的第一个标签片段。

    package com.esmobileinc.vetmapp;
    
    import android.app.AlertDialog;
    import android.app.Dialog;
    import android.content.Context;
    import android.content.Intent;
    import android.location.Location;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.os.Bundle;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentTransaction;
    import android.view.LayoutInflater;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import com.google.android.gms.analytics.HitBuilders;
    import com.google.android.gms.analytics.Tracker;
    import com.google.android.gms.common.ConnectionResult;
    import com.google.android.gms.common.GooglePlayServicesUtil;
    import com.google.android.gms.location.LocationListener;
    import com.google.android.gms.maps.CameraUpdateFactory;
    import com.google.android.gms.maps.GoogleMap;
    import com.google.android.gms.maps.SupportMapFragment;
    import com.google.android.gms.maps.model.BitmapDescriptorFactory;
    import com.google.android.gms.maps.model.LatLng;
    import com.google.android.gms.maps.model.Marker;
    import com.google.android.gms.maps.model.MarkerOptions;
    import com.instabug.library.Instabug;
    import com.parse.FindCallback;
    import com.parse.ParseException;
    import com.parse.ParseObject;
    import com.parse.ParseQuery;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class HaritaFragment extends Fragment implements LocationListener {
    
    private static GoogleMap mGoogleMap;
    public static HashMap<Marker, Markers> mMarkersHashMap = new HashMap<Marker, Markers>();
    private ArrayList<Markers> mMyMarkersArray = new ArrayList<Markers>();
    private Map<Marker, Markers> allMarkersMap = new HashMap<Marker, Markers>();
    
    private Location userLocation;
    
    private LatLng latLng;
    private Double lat;
    private Double lng;
    
    private static View view;
    
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        setHasOptionsMenu(true);
        return inflater.inflate(R.layout.fragment_harita, container, false);
    
    }
    
    public void onViewCreated(View view, Bundle savedInstanceState){
        setupMap();
        //showGPSDisableAlert();
    }
    
    @Override
    public void onResume() {
        super.onResume();
    
        googleAnalyticsSendScreen();
    
        // Getting Google Play availability status
        int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity().getBaseContext());
    
        if (status != ConnectionResult.SUCCESS) { // Google Play Services are not available
    
            int requestCode = 10;
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, getActivity(), requestCode);
            dialog.show();
    
        } else { // Google Play Services are available
    
            getAllDataFromParse();
        }
    }
    
    public void onDestroyView()
    {
        super.onDestroyView();
        Fragment fragment = (getChildFragmentManager().findFragmentById(R.id.map));
        FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
        ft.remove(fragment);
        ft.commit();
    }
    
    private void showGPSDisableAlert(){
    
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(R.string.location_error_title);
        builder.setMessage(R.string.location_error_message);
        builder.setPositiveButton(android.R.string.ok, null);
    
        AlertDialog dialog = builder.create();
        dialog.show();
    }
    
    private void getLocations(){
    
        mGoogleMap.getUiSettings().setMapToolbarEnabled(false);
        userLocation = mGoogleMap.getMyLocation();
    
        if (userLocation != null) {
            onLocationChanged(userLocation);
            latLng = new LatLng(lat,lng);
            mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15));
        }
    
        else {
            showGPSDisableAlert();
            latLng = new LatLng(39.19820535, 34.89257812);
            mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 5));
        }
    }
    private void getAllDataFromParse(){
    
        if (mMyMarkersArray.isEmpty()){
    
            if (isInternetAvailable()){
                unPinAllParseData();
                getOnlineDataFromParse();
            }
            else{
                getOfflineDataFromParse();
            }
        }
    }
    private void unPinAllParseData(){
    
        ParseQuery<ParseObject> query = ParseQuery.getQuery("Veterinerler");
        query.setLimit(1000);
        ParseObject.unpinAllInBackground();
    }
    private void getOnlineDataFromParse(){
    
        ParseQuery<ParseObject> query = ParseQuery.getQuery("Veterinerler");
        query.setLimit(1000);
        query.whereEqualTo("isMember", "YES");
        query.findInBackground(new FindCallback<ParseObject>() {
    
            public void done(List<ParseObject> vetList, ParseException e) {
                if (e == null) {
    
                    for(int i=0; i< vetList.size(); i++){
    
                        mMyMarkersArray.add(new Markers(
    
                                vetList.get(i).getString("adi"),
                                vetList.get(i).getString("adres"),
                                vetList.get(i).getString("telefon"),
                                vetList.get(i).getString("web"),
                                vetList.get(i).getString("face"),
                                vetList.get(i).getString("geceAcik"),
                                vetList.get(i).getDouble("latitude"),
                                vetList.get(i).getDouble("longitude")));
                    }
    
                    getLocations();
                    plotMarkers(mMyMarkersArray);
                    ParseObject.pinAllInBackground(vetList);
    
    
                } else {
                    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                    builder.setTitle(getString(R.string.parse_online_query_error_title));
                    builder.setMessage(getString(R.string.parse_online_query_error_message));
                    builder.setPositiveButton(android.R.string.ok, null);
                    AlertDialog dialog = builder.create();
                    dialog.show();
                }
            }
        });
    }
    private void getOfflineDataFromParse(){
    
        ParseQuery<ParseObject> query = ParseQuery.getQuery("Veterinerler");
        query.setLimit(1000);
        query.whereEqualTo("isMember", "YES");
        query.fromLocalDatastore();
        query.findInBackground(new FindCallback<ParseObject>() {
    
            public void done(List<ParseObject> vetList, ParseException e) {
                if (e == null) {
                    getLocations();
    
                    for(int i=0; i< vetList.size(); i++){
    
                        mMyMarkersArray.add(new Markers(
    
                                vetList.get(i).getString("adi"),
                                vetList.get(i).getString("adres"),
                                vetList.get(i).getString("telefon"),
                                vetList.get(i).getString("web"),
                                vetList.get(i).getString("face"),
                                vetList.get(i).getString("geceAcik"),
                                vetList.get(i).getDouble("latitude"),
                                vetList.get(i).getDouble("longitude")));
                    }
    
                    plotMarkers(mMyMarkersArray);
    
                } else {
    
                    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                    builder.setTitle(getString(R.string.parse_offline_query_error_title));
                    builder.setMessage(getString(R.string.parse_offline_query_error_title));
                    builder.setPositiveButton(android.R.string.ok, null);
                    AlertDialog dialog = builder.create();
                    dialog.show();
                }
            }
        });
    }
    private void googleAnalyticsSendScreen() {
    
        Tracker t = ((GlobalState) getActivity().getApplication()).getTracker(
                GlobalState.TrackerName.APP_TRACKER);
        t.setScreenName("Harita Ekranı");
        t.send(new HitBuilders.AppViewBuilder().build());
    }
    private void plotMarkers(ArrayList<Markers> markers){
        if(markers.size() > 0)
        {
            for (Markers myMarker : markers)
            {
                // Create user marker with custom icon and other options
                MarkerOptions markerOption = new MarkerOptions().position(new LatLng(myMarker.getmLatitude(), myMarker.getmLongtitude()));
    
                if (myMarker.getmGeceAcik().equalsIgnoreCase("YES")){
    
                    markerOption.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
                }
    
                else if (myMarker.getmGeceAcik().equalsIgnoreCase("Cep")){
    
                    markerOption.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
                }
    
                else if (myMarker.getmGeceAcik().equalsIgnoreCase("Barinak")){
    
                    markerOption.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_VIOLET));
                }
    
    
                final Marker currentMarker = mGoogleMap.addMarker(markerOption);
                mMarkersHashMap.put(currentMarker, myMarker);
                allMarkersMap.put(currentMarker, myMarker);
    
                mGoogleMap.setInfoWindowAdapter(new GoogleMap.InfoWindowAdapter() {
                    @Override
                    public View getInfoWindow(Marker marker) {
    
                        Markers selectedMarkerInfo = allMarkersMap.get(marker);
    
                        View v = View.inflate(getActivity().getBaseContext(),R.layout.info_window,null);
    
                        TextView tvAdi = (TextView) v.findViewById(R.id.tv_adi);
                        TextView tvAdres = (TextView) v.findViewById(R.id.tv_adres);
                        ImageView img = (ImageView) v.findViewById(R.id.img_icon);
    
                        tvAdi.setText(selectedMarkerInfo.getmAdi());
                        tvAdres.setText(selectedMarkerInfo.getmAdres());
                        tvAdi.setSelected(true);
    
                        if (selectedMarkerInfo.mGeceAcik.equalsIgnoreCase("Barinak")){
    
                            img.setImageResource(R.drawable.belediye);
                        }
    
                        else if (selectedMarkerInfo.mGeceAcik.equalsIgnoreCase("YES")){
    
                            img.setImageResource(R.drawable.gece_acik);
                        }
    
                        else if (selectedMarkerInfo.mGeceAcik.equalsIgnoreCase("Cep")){
    
                            img.setImageResource(R.drawable.acil);
                        }
    
                        else{
                            img.setImageResource(R.drawable.normal);
                        }
                        return v;
                    }
    
                    @Override
                    public View getInfoContents(Marker marker) {
    
                        return null;
                    }
                });
            }
        }
    }
    private void setupMap(){
    
        mGoogleMap = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)).getMap();
        mGoogleMap.setMyLocationEnabled(true);
    
        latLng = new LatLng(39.19820535, 34.89257812);
        //latLng = new LatLng(41.048846, 29.027924);
        mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 5));
    
                //OnClick Info Window Listener...
                mGoogleMap.setOnInfoWindowClickListener(new GoogleMap.OnInfoWindowClickListener() {
                    @Override
                    public void onInfoWindowClick(Marker marker) {
    
                        Markers selectedMarkerInfo = allMarkersMap.get(marker);
    
                        //GOOGLE ANALYTICS EVENT SENDER
                        String secilenVeteriner = selectedMarkerInfo.getmAdi();
                        Tracker t = ((GlobalState) getActivity().getApplication()).getTracker(
                                GlobalState.TrackerName.APP_TRACKER);
    
                        t.send(new HitBuilders.EventBuilder()
                                .setCategory(secilenVeteriner)
                                .setAction("Harita ekranın'dan seçilme sayınız")
                                .setLabel("Harita")
                                .build());
    
                        Intent intent = new Intent(getActivity(), DetailActivity.class);
    
                        intent.putExtra("adi", selectedMarkerInfo.getmAdi());
                        intent.putExtra("adres", selectedMarkerInfo.getmAdres());
                        intent.putExtra("web", selectedMarkerInfo.getmWeb());
                        intent.putExtra("face", selectedMarkerInfo.getmFace());
                        intent.putExtra("tel", selectedMarkerInfo.getmTelefon());
                        intent.putExtra("lat", selectedMarkerInfo.getmLatitude().toString());
                        intent.putExtra("lng", selectedMarkerInfo.getmLongtitude().toString());
                        intent.putExtra("gece", selectedMarkerInfo.getmGeceAcik());
    
                        startActivity(intent);
                    }
                });
    
    }
    private boolean isInternetAvailable() {
        ConnectivityManager connectivityManager
                = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }
    @Override
    public void onLocationChanged(Location location) {
            lat =  (location.getLatitude());
            lng =  (location.getLongitude());
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_mail) {
    
            Instabug.getInstance().setCommentFieldHint(getString(R.string.veterinerbildir_comment));
            Instabug.getInstance().enableEmailField(true,true);
            Instabug.getInstance().setCommentRequired(true);
    
            Instabug.getInstance().invokeFeedbackProcess(Instabug.INSTABUG_FEEDBACK_FEEDBACK);
    
            return true;
        }
    
        if (id == R.id.map_standart){
    
            mGoogleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    
        }
    
        if (id == R.id.map_hibrit){
    
            mGoogleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        }
    
        if (id == R.id.map_uydu){
    
            mGoogleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
        }
    
        return super.onOptionsItemSelected(item);
    }
    }
    

    这是我的第二个选项卡片段类,第三个选项卡片段是相同的。

        package com.esmobileinc.vetmapp;
    
    
    import android.app.AlertDialog;
    import android.content.Context;
    import android.content.Intent;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.os.Bundle;
    import android.support.v4.app.ListFragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.TextView;
    
    import com.google.android.gms.analytics.HitBuilders;
    import com.google.android.gms.analytics.Tracker;
    import com.parse.FindCallback;
    import com.parse.ParseException;
    import com.parse.ParseObject;
    import com.parse.ParseQuery;
    
    import java.text.Collator;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.LinkedHashSet;
    import java.util.List;
    import java.util.Locale;
    
    public class ListeFragment extends ListFragment {
    
    private View mView;
    
    private ArrayList<String> illerArray = new ArrayList<String>();
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
        mView = inflater.inflate(R.layout.fragment_liste, container, false);
    
        return mView;
    }
    
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    
        getAllDataFromParse();
    }
    
    
    @Override
    public void onResume() {
        super.onResume();
    
        googleAnalyticsSendScreen();
    
    }
    
    private void getAllDataFromParse(){
    
        if (illerArray.isEmpty()){
    
            if (isInternetAvailable()){
                getOnlineDataFromParse();
            }
            else{
                getOfflineDataFromParse();
            }
        }
    }
    
    
    private boolean isInternetAvailable() {
        ConnectivityManager connectivityManager
                = (ConnectivityManager) this.getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }
    
    private void getOnlineDataFromParse(){
    
        ParseQuery<ParseObject> query = ParseQuery.getQuery("Veterinerler");
        query.setLimit(1000);
        query.whereEqualTo("isMember", "YES");
        query.findInBackground(new FindCallback<ParseObject>() {
    
            public void done(List<ParseObject> vetList, ParseException e) {
                if (e == null) {
    
                    for(int i=0; i< vetList.size(); i++){
    
                        illerArray.add(vetList.get(i).getString("il"));
                    }
    
                    illerArray = new ArrayList<String>(new LinkedHashSet<String>(illerArray));
    
                    Collections.sort(illerArray, new orderComparator());
                    showListView();
                    registerCallBack();
    
                } else {
    
                    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                    builder.setTitle(getString(R.string.parse_online_query_error_title));
                    builder.setMessage(getString(R.string.parse_online_query_error_message));
                    builder.setPositiveButton(android.R.string.ok, null);
                    AlertDialog dialog = builder.create();
                    dialog.show();
                }
            }
    
        });
    }
    
    private void getOfflineDataFromParse(){
    
        ParseQuery<ParseObject> query = ParseQuery.getQuery("Veterinerler");
        query.fromLocalDatastore();
        query.setLimit(1000);
        query.whereEqualTo("isMember", "YES");
        query.findInBackground(new FindCallback<ParseObject>() {
    
            public void done(List<ParseObject> vetList, ParseException e) {
                if (e == null) {
    
                    for(int i=0; i< vetList.size(); i++){
    
                        illerArray.add(vetList.get(i).getString("il"));
                    }
    
                    illerArray = new ArrayList<String>(new LinkedHashSet<String>(illerArray));
    
                    Collections.sort(illerArray, new orderComparator());
                    showListView();
                    registerCallBack();
    
                } else {
    
                    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                    builder.setTitle(getString(R.string.parse_online_query_error_title));
                    builder.setMessage(getString(R.string.parse_online_query_error_message));
                    builder.setPositiveButton(android.R.string.ok, null);
                    AlertDialog dialog = builder.create();
                    dialog.show();
                }
            }
    
        });
    }
    
    private void showListView() {
    
        ArrayAdapter<String> adapter = new myListAdapter();
        ListView listView = (ListView) getActivity().findViewById(android.R.id.list);
        listView.setAdapter(adapter);
    }
    
    private void registerCallBack() {
    
        ListView listView = (ListView) getActivity().findViewById(android.R.id.list);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
                String secilenIl = illerArray.get(position);
    
                //GOOGLE EVENT SEND
                Tracker t = ((GlobalState) getActivity().getApplication()).getTracker(
                        GlobalState.TrackerName.APP_TRACKER);
    
                t.send(new HitBuilders.EventBuilder()
                        .setCategory("İller Listesi")
                        .setAction("Seçilen il")
                        .setLabel(secilenIl)
                        .build());
    
                //INTENTING DETAIL VIEW CONTROLLER !!!!
                Intent intent = new Intent(getActivity(),IlcelerActivity.class);
    
                intent.putExtra("secilenIl",secilenIl);
    
                startActivity(intent);
    
            }
        });
    }
    
    private class myListAdapter extends ArrayAdapter<String>{
    
        public myListAdapter(){
    
            super(getActivity(), R.layout.ilce_view, illerArray);
    
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
    
            View itemView = convertView;
    
            if (itemView == null){
    
                itemView = getActivity().getLayoutInflater().inflate(R.layout.ilce_view, parent, false);
            }
    
            String il = illerArray.get(position);
    
            TextView ilce = (TextView) itemView.findViewById(android.R.id.text1);
            ilce.setText(il);
    
            return itemView;
        }
    }
    
    public class orderComparator implements Comparator<String> {
    
        @Override
        public int compare(String il1, String il2) {
            Collator collator = Collator.getInstance(Locale.getDefault());
            //veya Collator trCollator = Collator.getInstance(new Locale("tr", "TR"));
            return collator.compare(il1, il2);
        }
    }
    
    }
    

    使用这些代码,当我点击第三个选项卡时,我的应用程序调用HaritaFrament(第一个选项卡)onDestroyView方法。
    但当我点击第二次时,它不会调用onDestroyView。
    我不想破坏我的HaritaFragment。

    请帮我解决这个问题。

    1 回复  |  直到 11 年前
        1
  •  5
  •   Hassan Ibraheem    11 年前

    你要找的是 ViewPager#setOffscreenPageLimit .

    默认情况下为1,这意味着ViewPager将只保留当前位置之前和之后的1个片段。如果您有3个片段,并且您不希望它们中的任何一个被ViewPager破坏,您可以将其设置为2。

    mViewPager.setOffscreenPageLimit(2);
    
    推荐文章