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

标签 android android-fragments android-activity android-viewpager fragment

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

当我点击第三个选项卡时,它会销毁第一个选项卡 fragment ,并在第一个选项卡 fragment 中调用 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;
}
}

这是我的主要 Activity 。

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) {
}
}

这是我的第一个选项卡 fragment 。

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);
}
}

有我的第二个选项卡 fragment 类,第三个选项卡 fragment 是相同的。

    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。

请帮我解决这个问题。

最佳答案

您正在寻找的是 ViewPager#setOffscreenPageLimit .

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

mViewPager.setOffscreenPageLimit(2);

关于当我点击第三次点击时,Android TabActivity 会调用 onDestroyView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29278673/

相关文章:

android - cordova 5.0 生成签名的apk

java - 仍然出现并发修改错误

Android,构建成功,但 apk 构建(后续运行)失败

android - 当应用两个连续的 setContentView 时,第一个 View 不可见

PHP修改从数据库检索的值(编码和特殊字符问题)

android - 如果我们必须在 android 中使用 viewpager 创建多个页面,那么我们是否必须创建多个 fragment ?还有其他选择吗?

Android 抽屉导航 : How to change actionBarMenu according to drawer list item select

java - 从 Fragment 内的 FragmentActivity 访问对象?

android - 当谈到前景时杀死 Activity

android - 检测在应用程序内部启动的 Activity