android - 从另一个抽屉 fragment 导航回来时,选项卡布局数据消失

标签 android eclipse android-viewpager android-volley android-tablayout

我有一个抽屉导航和一个抽屉项目。 Home 是一个带有 3 个标签View Pager。当我第一次打开 View Pager 选项卡时一切正常,但是当我在导航到其中一个 Drawer fragments(比如配置文件)后导航回它时,它是空(所有三个选项卡)

 import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.preference.PreferenceActivity;
    import android.support.design.widget.NavigationView;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentTransaction;
    import android.support.v4.widget.DrawerLayout;
    import android.support.v7.app.ActionBarDrawerToggle;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.FrameLayout;
    import android.widget.TextView;

    import com.android.volley.toolbox.ImageLoader;
    import com.android.volley.toolbox.NetworkImageView;
    import com.example.amol.ecom.login.SessionManager;

    import de.hdodenhof.circleimageview.CircleImageView;

    public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

        DrawerLayout drawer;
        FrameLayout frameLayout;
        NavigationView navigationView;
        ActionBarDrawerToggle toogle;
        Fragment fragment;
        NetworkImageView networkImageView;
        public TextView nametextview, emailtextview;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);

            frameLayout = (FrameLayout) findViewById(R.id.frame_container);
            drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
            toogle = new ActionBarDrawerToggle(MainActivity.this, drawer, R.string.open_Drawer, R.string.close_Drawer);
            drawer.setDrawerListener(toogle);
            navigationView = (NavigationView) findViewById(R.id.nav_view);
            navigationView.setNavigationItemSelectedListener(this);
            navigationView.setItemIconTintList(null);
            View headerLayout = navigationView.inflateHeaderView(R.layout.header_layout);

            ImageLoader imageLoader=AppController.getInstance().getImageLoader();
            networkImageView = (NetworkImageView) headerLayout.findViewById(R.id.circleImageView);
            networkImageView.setImageUrl(SessionManager.personPicture,imageLoader);
            nametextview = (TextView) headerLayout.findViewById(R.id.name_textview);
            nametextview.setText(SessionManager.personName);
            emailtextview = (TextView) headerLayout.findViewById(R.id.email_textview);
            emailtextview.setText(SessionManager.personEmail);
            //networkImageView.setImageURI(SessionManager.personPhoto);

            getSupportActionBar().setDisplayShowHomeEnabled(true);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);

             FragmentManager fragmentManager = getSupportFragmentManager();
             fragmentManager.beginTransaction().replace(R.id.frame_container, new HomeFragment()).commit();

        }

        @Override
        public void onPostCreate(Bundle savedInstanceState) {
            super.onPostCreate(savedInstanceState);
            toogle.syncState();
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {

            int id = item.getItemId();

            if (id == R.id.action_settings) {
                return true;
            }
            if (id == android.R.id.home) {
                if (drawer.isDrawerOpen(navigationView)) {
                    drawer.closeDrawer(navigationView);
                } else drawer.openDrawer(navigationView);
            }

            return super.onOptionsItemSelected(item);
        }

        @Override
        public boolean onNavigationItemSelected(MenuItem item) {
            int id = item.getItemId();
            item.setCheckable(true);

            if (id == R.id.home) {
                fragment = new HomeFragment();
                FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                ft.replace(R.id.frame_container, fragment);
                ft.attach(fragment);
                getSupportActionBar().setTitle("Home");
                ft.commit();
            }
            if (id == R.id.profile) {
                fragment = new Profile();
                FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                ft.replace(R.id.frame_container, fragment);
                getSupportActionBar().setTitle("Profile");
                ft.commit();
            }
            if (id == R.id.notify) {
                fragment = new Notification();
                FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                ft.replace(R.id.frame_container, fragment);
                getSupportActionBar().setTitle("Notification");
                ft.commit();
            }
            if (id == R.id.feedback) {
                Intent i = new Intent(Intent.ACTION_SEND);
                i.setData(Uri.parse("mailto:"));
                String[] to = {"wangate.amol@gmail.com", "wangate.amol@yahoo.com"};
                i.putExtra(Intent.EXTRA_EMAIL, to);
                i.putExtra(Intent.EXTRA_TEXT, "");
                i.putExtra(Intent.EXTRA_SUBJECT, "");
                i.setType("message/rfc822");
                startActivity(i);

            }
            if (id == R.id.share) {
                Intent intent = new Intent(Intent.ACTION_SEND);
                intent.putExtra(Intent.EXTRA_TEXT, "http://");
                intent.setType("text/plain");
                Intent chooser = Intent.createChooser(intent, "Share Using");
                startActivity(chooser);
            }
            if (id == R.id.rateus) {
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.setData(Uri.parse("market://"));
                Intent chooser = Intent.createChooser(intent, "Complete Action Using");
                startActivity(chooser);

            }
            if (id == R.id.aboutus) {
                // Intent intent=new Intent(MainActivity.this,About.class);
                // startActivity(intent);

            }
            drawer.closeDrawers();
            return true;
        }
    }

Tab layout code is given below

import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;
import java.util.List;


/**
 * A simple {@link Fragment} subclass.
 */
public class HomeFragment extends Fragment {

    TabLayout tabLayout;
    ViewPager viewPager;

    public HomeFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_home, container, false);
        viewPager = (ViewPager) view.findViewById(R.id.view_pager);
        viewPager.setOffscreenPageLimit(3);
        setUpViewPager(viewPager);

        tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);
        tabLayout.setupWithViewPager(viewPager);

        return view;
    }


    private void setUpViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager());
        adapter.addFragment(new One(), "One");
        adapter.addFragment(new Two(), "Two");
        adapter.addFragment(new Three(), "Three");
        viewPager.setAdapter(adapter);
    }

}

class ViewPagerAdapter extends FragmentPagerAdapter {

    final List<Fragment> mfragmentList = new ArrayList<>();
    final List<String> mfragmentTitle = new ArrayList<>();

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

    @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);
        mfragmentTitle.add(title);
    }

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

here is one of the tab of tab layout(View pager)

import android.annotation.TargetApi;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;

import com.android.volley.NoConnectionError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.TimeoutError;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.example.amol.ecom.login.SessionManager;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;


public class One extends Fragment implements SearchView.OnQueryTextListener {

    private ArrayList<FoodItemList> foodItemLists = new ArrayList<>();
    public RecyclerView mRecyclerView;
    public RecyclerView.LayoutManager mLayoutManager;
    private ItemOneAdapter itemOneAdapter;
    //    public SwipeRefreshLayout swipeRefreshLayout;
    public LinearLayout linearLayout;

    // private static final String url_all_items = "http://10.0.2.2/xampp/ecom/Read_food_items.php";
    private static String url_all_items = "https://www.food2all.in/apps/food2all/Read_Food_Item.php";
    private static final String TAG_ITEMS = "Item_Details";
    private static final String TAG_IMG_URL = "image_url";
    private static final String TAG_ITEM_NAME = "food_name";
    private static final String TAG_ITEM_DESCRIPTION = "food_description";
    private static final String TAG_PRICE = "food_price";
    public JSONArray items;
    public Toolbar toolbar;
    public TextView TextViewPrice;


    public One() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_one, container, false);
        toolbar = (Toolbar) view.findViewById(R.id.toolbar_proceed);
        TextViewPrice = (TextView) toolbar.findViewById(R.id.textView_Item_Price);
        toolbar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getActivity(), CheckOutActivity.class);
                startActivity(intent);
            }
        });
        linearLayout = (LinearLayout) view.findViewById(R.id.linearlayoutfragmentone);
        //      swipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swiperefresh_recyclerviewholder);
        //    swipeRefreshLayout.setOnRefreshListener(this);
        setCheckOutLayout();
        return view;
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
        mLayoutManager = new LinearLayoutManager(getActivity());
        mRecyclerView.setLayoutManager(mLayoutManager);
        foodItemLists.clear();
        ItemOneParsing();
        itemOneAdapter = new ItemOneAdapter(foodItemLists, getActivity());
        System.out.println("fooditemlists" + foodItemLists.size());
        mRecyclerView.setAdapter(itemOneAdapter);


    }


    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);

        final MenuItem item = menu.findItem(R.id.action_search);
        final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
        searchView.setOnQueryTextListener(this);
        System.out.println("Inside onCreate Option Menu ");

        MenuItemCompat.setOnActionExpandListener(item, new MenuItemCompat.OnActionExpandListener() {
            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                itemOneAdapter.setFilter(foodItemLists);
                return true;
            }

            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                return true;
            }
        });
    }

    public void ItemOneParsing() {

       final ProgressDialog loading = ProgressDialog.show(getActivity(), "Fetching Food", "Please wait...", false, false);
        JsonObjectRequest fooditemreq = new JsonObjectRequest(Request.Method.GET, url_all_items, null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                loading.dismiss();
                JsonItemOneParsing(response);

            }
        }, new Response.ErrorListener() {
            @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                loading.dismiss();
                System.out.println("volley item error message response" + volleyError.getMessage());
                if (volleyError instanceof NoConnectionError) {
                    linearLayout.setBackground(getResources().getDrawable(R.mipmap.noconnect));
                    Snackbar snackbar = Snackbar.make(getView(), "Unable to Connect", Snackbar.LENGTH_SHORT)
                            .setAction("Retry", new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    ItemOneParsing();
                                }
                            });
                    snackbar.setActionTextColor(Color.RED);
                    snackbar.show();
                } else if (volleyError instanceof TimeoutError) {
                    Toast.makeText(getActivity(), "Slow Internet connection, Please try again", Toast.LENGTH_SHORT).show();
                    System.out.println("volley item error message response" + volleyError.getMessage());
                }


            }
        });
        AppController.getInstance().addToRequestQueue(fooditemreq);

    }


    private void JsonItemOneParsing(JSONObject response) {
        System.out.println("Volley Success response" + response.toString());
        try {

            int success = response.getInt("success");

            if (success == 1) {
                System.out.println("volley item entering after success");
                items = response.getJSONArray((TAG_ITEMS));
                System.out.println("volley item entering success loop==" + items);

                JSONObject c = null;
                for (int i = 0; i < items.length(); i++) {

                    FoodItemList itemList = new FoodItemList();
                    c = items.getJSONObject(i);
                    System.out.println("volley item entering success loop==" + c);

                    String itemimage = c.getString(TAG_IMG_URL);
                    itemList.setImageurl(itemimage);
                    System.out.println("volley item image==" + itemimage);

                    String itemName = c.getString(TAG_ITEM_NAME);
                    itemList.setItemName(itemName);
                    System.out.println("volley item name==" + itemName);

                    String itemDesc = c.getString(TAG_ITEM_DESCRIPTION);
                    itemList.setItemdesciption(itemDesc);
                    System.out.println("volley item descroption==" + itemDesc);

                    String itemPrice = c.getString(TAG_PRICE);
                    itemList.setItemprice(itemPrice);
                    System.out.println("volley item price==" + itemPrice);

                    foodItemLists.add(itemList);
                    itemOneAdapter.notifyDataSetChanged();
                }

            }


        } catch (JSONException e) {
            e.printStackTrace();
        }
    }


    public void setCheckOutLayout() {
        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                if (getActivity() == null)
                    return;

                getActivity().runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        if (SessionManager.ProccedFlag == 1) {
                            toolbar.setVisibility(View.VISIBLE);
                        } else {
                            toolbar.setVisibility(View.GONE);
                        }
                    }
                });

            }
        }, 5, 5);
    }

    @Override
    public boolean onQueryTextSubmit(String query) {
        return false;
    }

    @Override
    public boolean onQueryTextChange(String newText) {
        final ArrayList<FoodItemList> filtereditemlist = filter(foodItemLists, newText);
        itemOneAdapter.setFilter(filtereditemlist);

        return false;
    }

    private ArrayList<FoodItemList> filter(ArrayList<FoodItemList> foodItemLists, String newText) {
        newText = newText.toLowerCase();

        final ArrayList<FoodItemList> filtereditemlist = new ArrayList<>();
        for (FoodItemList foodItemList : foodItemLists) {
            final String text = foodItemList.getItemName().toLowerCase();
            if (text.contains(newText)) {
                filtereditemlist.add(foodItemList);
            }
        }
        return filtereditemlist;
    }
}

最佳答案

尝试扩展 FragmentStatePagerAdapter,而不是 FragmentPagerAdapter,它曾经为我解决了世界上的麻烦。

主要区别是 FragmentStatePagerAdapter 应该用于大量页面,而 FragmentPagerAdapter 用于少量页面,这些页面将保存在内存中。查看官方文档或 this link获取更多信息。

关于android - 从另一个抽屉 fragment 导航回来时,选项卡布局数据消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35959082/

相关文章:

android - 如何确定 Fragment 何时在 ViewPager 中可见

android - 测试rxjava回调函数

android - 在 Android 中优化位图创建/调整大小

java - 在屏幕上显示 ListView 并通过单击按钮向其添加元素

java - 如何重置 Eclipse 源/排序成员设置?

eclipse - 打包前在 Maven 中执行任务

android - viewPager.setCurrentItem() 不工作

android - CardView 中的 layout_margin 无法正常工作

java - Java包之间如何传递数据?

android - 查看寻呼机 fragment 和选项卡不同步android