2017-07-26 2 views
-1

Das ist etwas schwer zu erklären, also habe ich Screenshots meines Problems gemacht.Fragment "verschwindet" nach dem Öffnen des neuen Fragments und dann wieder zurück

Das ist also mein MainActivity.java

ich die Navigationsleiste öffnen und klicken Sie auf Meilensteine, die mich zu Milestones.java

bringen

Hier bin ich bei Milestones.java Fragment ...

arbeitet jetzt gut ...

Genau wie ich es aussehen soll.

Aber wenn wir verlassen Meilensteine ​​und gehen anderswo und wieder wird es vermasselt werden. Also werde ich zu Kick Counter gehen.

enter image description here

Hier bin ich in meinem KickCounter.java Fragment

enter image description here

Navigationsleiste öffnen und zurück zu gehen Meilensteine ​​...

enter image description here

So jetzt Ich habe das Fragment Months0Through6 mit dem Milestones-Fragment geöffnet. Manchmal werden die Fragmente Months0Through6 und Month12Plus nicht sofort angezeigt, nachdem sie einige Male zurückgelaufen sind. Was immer an dieser Stelle durcheinander ist, ist, dass das Fragment Months6Through12 nie wieder angezeigt wird, wenn Sie die App nicht neu starten. Auch der Wechsel zwischen den drei Fragmenten ist nach dem Zurückkommen zwar verzögert, aber nie auf den ersten Blick.

Hier ist sie. Wo ist es hin?

Youtube Video: https://www.youtube.com/watch?v=6yMYcluvqbs

Get Quelle Hier: https://github.com/delaroy/RecyclerViewFragment

ich meinen Code aus diesem YouTube-Video bekam die fast genau identisch ist, aber seine MainActivity (was ich in meinem Milestones-Fragment gemacht) ist eine Aktivität, während ich ein Fragment benutzte, also dachte ich, dass das etwas zu tun hätte Mit meinem Problem.

Meilensteine.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; } 

Posting nur Months0Through6.java weil die anderen beiden sind genau die gleichen nur verschiedene Saiten.

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

} 

Antwort

1

In Fragmente Sie müssen getChildFragmentManager() verwenden, verwenden Sie gleichen Fragment Manager in den Fragmenten wie in Aktivität. Hoffe, das wird helfen

+0

Genau was es war. Vielen Dank! –

Verwandte Themen