2017-07-26 45 views
-1

这是一种很难解释,所以我采取我的问题的截图。碎片“消失”后打开新的片段,然后回来

所以这是我MainActivity.java

我打开抽屉式导航栏,然后点击里程碑,这将带给我Milestones.java

在这里,我在Milestones.java片段...

现在工作正常...

只是我希望它看起来。

但是,当我们离开里程碑和别的地方去,回来就会搞砸。所以我会去踢球台。

enter image description here

在这里,我在我的KickCounter.java片段

enter image description here

打开导航抽屉,可以追溯到里程碑...

enter image description here

所以现在我有片段Months0Through6与里程碑片段打开。有些时候Months0Through6和Month12Plus片段在回来几次后不会马上显示出来。现在总是搞砸了,Months6Through12片段不会再次显示,除非您重新启动应用程序。在回来之后,在三个片段之间交换也是滞后的,但从未在第一个视图中交换。

这。它去了哪里?

的YouTube视频:https://www.youtube.com/watch?v=6yMYcluvqbs

获取源代码在这里:https://github.com/delaroy/RecyclerViewFragment

我得到了我的代码从这个YouTube视频几乎是完全相同的,但他的MainActivity(我制作成我的里程碑片段)是一项活动,而我使用了一个片段,所以我认为可能有些事情要做我的问题。里程碑。

里程碑。java的

public class Milestones extends Fragment { 
// TODO: Rename parameter arguments, choose names that match 
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER 
private static final String ARG_PARAM1 = "param1"; 
private static final String ARG_PARAM2 = "param2"; 

// TODO: Rename and change types of parameters 
private String mParam1; 
private String mParam2; 

private OnFragmentInteractionListener mListener; 

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

/** 
* Use this factory method to create a new instance of 
* this fragment using the provided parameters. 
* 
* @param param1 Parameter 1. 
* @param param2 Parameter 2. 
* @return A new instance of fragment Milestones. 
*/ 
// TODO: Rename and change types and number of parameters 
public static Milestones newInstance(String param1, String param2) { 
    Milestones fragment = new Milestones(); 
    Bundle args = new Bundle(); 
    args.putString(ARG_PARAM1, param1); 
    args.putString(ARG_PARAM2, param2); 
    fragment.setArguments(args); 
    return fragment; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     mParam1 = getArguments().getString(ARG_PARAM1); 
     mParam2 = getArguments().getString(ARG_PARAM2); 
    } 
} 

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

    View rootView = inflater.inflate(R.layout.fragment_milestones, container, false); 

    Toolbar toolbar = (Toolbar) rootView.findViewById(R.id.toolbar); 


    ViewPager viewPager = (ViewPager) rootView.findViewById(R.id.viewpager); 
               //dont know if this will work 
    PagerAdapter pagerAdapter = new PagerAdapter(getFragmentManager(), getContext()); 
    viewPager.setAdapter(pagerAdapter); 

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

    for(int i = 0; i < tabLayout.getTabCount(); i++){ 
     TabLayout.Tab tab = tabLayout.getTabAt(i); 
     tab.setCustomView(pagerAdapter.getTabView(i)); 
    } 

    // Inflate the layout for this fragment 
    return rootView; 
} 

// not boiler plate 
@Override 
public void onResume() { 
    super.onResume(); 
} 

// probably just adding extra menu dont need it 
/*@Override 
public boolean onCreateOptionsMenu(Menu menu){ 

    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 

} 
*/ 

//not boilerplate 
@Override 
public boolean onOptionsItemSelected(MenuItem item){ 
    int id = item.getItemId(); 

    if(id == R.id.action_settings){ 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 

} 

//not boilerplate 
class PagerAdapter extends FragmentPagerAdapter { 

    String tabTitles[] = new String[]{"0-6 Months", "6-12 Months", "12+ Months"}; 
    Context context; 

    public PagerAdapter(FragmentManager fm, Context context) { 
     super(fm); 
     this.context = context; 
    } 

    @Override 
    public int getCount() { 
     return tabTitles.length; 
    } 

    @Override 
    public Fragment getItem(int position) { 

     switch (position) { 
      case 0: 
       return new Months0Through6(); 
      case 1: 
       return new Months6Through12(); 
      case 2: 
       return new Months12Plus(); 
     } 

     return null; 
    } 


    @Override 
    public CharSequence getPageTitle(int position){ 
     return tabTitles[position]; 
    } 

    public View getTabView(int position){ 
     View tab = LayoutInflater.from(getContext()).inflate(R.layout.custom_tab, null); 
     TextView tv = (TextView) tab.findViewById(R.id.custom_text); 
     tv.setText(tabTitles[position]); 
     return tab; 
    } 
} 


// TODO: Rename method, update argument and hook method into UI event 
public void onButtonPressed(Uri uri) { 
    if (mListener != null) { 
     mListener.onFragmentInteraction(uri); 
    } 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    if (context instanceof OnFragmentInteractionListener) { 
     mListener = (OnFragmentInteractionListener) context; 
    } else { 
     throw new RuntimeException(context.toString() 
       + " must implement OnFragmentInteractionListener"); 
    } 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    mListener = null; 
} 

/** 
* This interface must be implemented by activities that contain this 
* fragment to allow an interaction in this fragment to be communicated 
* to the activity and potentially other fragments contained in that 
* activity. 
* <p> 
* See the Android Training lesson <a href= 
* "http://developer.android.com/training/basics/fragments/communicating.html" 
* >Communicating with Other Fragments</a> for more information. 
*/ 
public interface OnFragmentInteractionListener { 
    // TODO: Update argument type and name 
    void onFragmentInteraction(Uri uri); 
} 

MilestonesAdapter.java

public class MilestonesAdapter extends RecyclerView.Adapter<MilestonesAdapter.MyViewHolder> { 

private String[] mDataset; 

public static class MyViewHolder extends RecyclerView.ViewHolder{ 
    public CardView mCardView; 
    public TextView mTextView; 
    public MyViewHolder(View v){ 
     super(v); 

     mCardView = (CardView) v.findViewById(R.id.card_view); 
     mTextView = (TextView) v.findViewById(R.id.tv_text); 

    } 

} 

public MilestonesAdapter(String[] myDataset){ 
    mDataset = myDataset; 
} 

@Override 
public MilestonesAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){ 
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_item, parent, false); 
    MyViewHolder vh = new MyViewHolder(v); 
    return vh; 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, int position){ 
    holder.mTextView.setText(mDataset[position]); 
} 

@Override 
public int getItemCount() { return mDataset.length; } 

只是发表Months0Through6.java因为其他两个是完全一样的只是不同的字符串。

public class Months0Through6 extends android.support.v4.app.Fragment { 

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

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View rootView = inflater.inflate(R.layout.fragment_blank, container, false); 

    RecyclerView rv = (RecyclerView) rootView.findViewById(R.id.rv_recycler_view); 
    rv.setHasFixedSize(true); 
    MilestonesAdapter adapter = new MilestonesAdapter(new String[]{"Month 0 stuff", "Example Two", "Example Three", "Example Four", "Example Five" , "Example Six" , "Example Seven"}); 
    rv.setAdapter(adapter); 

    LinearLayoutManager llm = new LinearLayoutManager(getActivity()); 
    rv.setLayoutManager(llm); 

    return rootView; 
} 

}

MainActivity.java

public class MainActivity extends AppCompatActivity 
    implements KickCounter.OnFragmentInteractionListener, MommyMetrics.OnFragmentInteractionListener, Milestones.OnFragmentInteractionListener, NavigationView.OnNavigationItemSelectedListener { 

Intent shareIntent; 
String sharetext = "Hey check out mommy-info here at http://www.mommy-info.com"; 
private WebView myWebView; 

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

    //Connects to www.mommy-info.com 
    myWebView = (WebView)findViewById(R.id.webView_ID); 
    WebSettings webSettings = myWebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    myWebView.loadUrl("http://www.mommy-info.com"); 
    myWebView.setWebViewClient(new WebViewClient()); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 
} 

@Override 
public void onBackPressed() { 

    //back button in navigation drawer logic 
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    if (drawer.isDrawerOpen(GravityCompat.START)) { 
     drawer.closeDrawer(GravityCompat.START); 
    } 
    //back button in webView logic 
    else if(myWebView.canGoBack()){ 
     myWebView.goBack(); 
    } 
    else if(getFragmentManager().getBackStackEntryCount() > 0) { 
     getFragmentManager().popBackStack(); 
    } 
    else{ 
     super.onBackPressed(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 

    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.kick_counter_ID) { 

     KickCounter kickCounter = new KickCounter(); 

     android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.full_screen_ID, kickCounter).addToBackStack(null).commit(); 


    } else if (id == R.id.nav_mommy_metrics) { 

     MommyMetrics mommyMetrics = new MommyMetrics(); 

     android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.full_screen_ID, mommyMetrics).addToBackStack(null).commit(); 

    } else if (id == R.id.nav_milestones) { 

     Milestones milestones = new Milestones(); 

     android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); 
     fragmentManager.beginTransaction().replace(R.id.full_screen_ID, milestones).addToBackStack(null).commit(); 

    } else if (id == R.id.nav_manage) { 

    } else if (id == R.id.nav_share) { 

     shareIntent = new Intent(Intent.ACTION_SEND); 
     shareIntent.setType("text/plain"); 
     shareIntent.putExtra(Intent.EXTRA_SUBJECT, "my app"); 
     shareIntent.putExtra(Intent.EXTRA_TEXT, sharetext); 
     startActivity(Intent.createChooser(shareIntent, "share via")); 

    } else if (id == R.id.nav_send) { 

    } 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

@Override 
public void onFragmentInteraction(Uri uri) { 

} 

回答

1

在你需要使用getChildFragmentManager(),您使用的是相同的片段经理的片段作为活性的片段。希望这会有所帮助

+0

究竟是什么。谢谢! –

相关问题