2017-08-31 4 views
-2

主な活動は、下部のナビゲーションを有し、かつ、その中に5つの断片が含まれていonbackpressed。各断片は複数の断片を内部に有する。それをオンパレスで処理する方法。

Homepage.java

public class Homepage extends AppCompatActivity { 
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener 
     = new BottomNavigationView.OnNavigationItemSelectedListener() { 

    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
     Fragment selectedFragment = null; 
     switch (item.getItemId()) { 
      case R.id.home: 
       selectedFragment = Fragment_home.newInstance(); 
       break; 
      case R.id.eventsfeed: 
       selectedFragment = Fragment_eventsfeed.newInstance(); 
       break; 
      case R.id.events: 
       selectedFragment = Fragment_events.newInstance(); 
       break; 
      case R.id.messages: 
       selectedFragment = Fragment_messages.newInstance(); 
       break; 
      case R.id.settings: 
       selectedFragment = Fragment_settings.newInstance(); 
       break; 
     } 
     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
     transaction.replace(R.id.content, selectedFragment); 
     transaction.commit(); 
     return true; 

    } 

}; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.homepage); 

    Fragment fragmentnewview = new Fragment_home(); 
    FragmentManager frMan = getSupportFragmentManager(); 
    FragmentTransaction frTr = frMan.beginTransaction(); 
    frTr.add(R.id.content,fragmentnewview); 
    frTr.commit(); 

    BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation); 
    navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener); 
    BottomNavigationViewHelper.disableShiftMode(navigation); 

}} 

Fragment_home.java

public class Fragment_home extends Fragment { 

public static Fragment_home newInstance(){ 
     Fragment_home fragment=new Fragment_home(); 
    return fragment; 
} 

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

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    final View view=inflater.inflate(R.layout.fragment_home, container, false); 
    CardView card=(CardView)view.findViewById(R.id.next_page_home_card); 

    card.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      view.setVisibility(View.GONE); 
      Fragment fragmentnewview = new Event_details(); 
      FragmentManager frMan = getActivity().getSupportFragmentManager(); 
      FragmentTransaction frTr = frMan.beginTransaction(); 
      frTr.add(R.id.content,fragmentnewview); 
      frTr.commit(); 
     } 
    }); 


    return view; 
} 

}私は、カードビューを持っているFragment_home.javaインサイド

それがクリックされたとき、それは次のフラグメントのEvent_Details.javaに行きます

Event_Details.java

それは別のフラグメントComments.java

Comments.java

public class Comments extends Fragment { 
ImageButton back; 
public static Comments newInstance(){ 
    Comments fragment=new Comments(); 
    return fragment; 
} 

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

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    final View view=inflater.inflate(R.layout.add_your_comments, container, false); 
    back=(ImageButton)view.findViewById(R.id.back); 

    back.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      view.setVisibility(View.GONE); 
      Fragment fragmentnewview = new Event_details(); 
      FragmentManager frMan = getActivity().getSupportFragmentManager(); 
      FragmentTransaction frTr = frMan.beginTransaction(); 
      frTr.add(R.id.content,fragmentnewview); 
      frTr.commit(); 
     } 
    }); 


    return view; 
} 

}

バックを呼び出すことがクリックしたとき

public class Event_details extends Fragment { 
Button add_comments; 
ImageButton back; 
public static Event_details newInstance(){ 
    Event_details fragment=new Event_details(); 
    return fragment; 
} 

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

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    final View view=inflater.inflate(R.layout.event_details, container, false); 
    add_comments=(Button)view.findViewById(R.id.add_comment); 

    back=(ImageButton)view.findViewById(R.id.back); 

    back.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      view.setVisibility(View.GONE); 
      Fragment fragmentnewview = new Fragment_home(); 
      FragmentManager frMan = getActivity().getSupportFragmentManager(); 
      FragmentTransaction frTr = frMan.beginTransaction(); 
      frTr.add(R.id.content,fragmentnewview); 
      frTr.commit(); 
     } 
    }); 
    add_comments.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      view.setVisibility(View.GONE); 
      Fragment fragmentnewview = new Comments(); 
      FragmentManager frMan = getActivity().getSupportFragmentManager(); 
      FragmentTransaction frTr = frMan.beginTransaction(); 
      frTr.add(R.id.content,fragmentnewview); 
      frTr.commit(); 
     } 
    }); 


    return view; 
} 

}

iがEvent_Details.javaのボタンを有します。 setOnClickListenerは戻るボタンですが、ハードウェアの戻るボタンには実装できません。あなたがフラグメントをロード

+2

あなたが何をしたか、あなたがテストしたものを、あなたのコードを配置しようとすると...私たちは、あなたが、私は、コードを更新し、問題 – Shudy

+1

を解決するために何をしているかを知るための魔術師ではありません。 –

答えて

0

、FragmentTransactionにaddToBackStack(null)を使用します。これを行うと、戻るボタンはトランザクションを取り消します。

0

あなたはあなたの活動onBackPressed()方法を@Overrideする必要があります! 質問には多くの良い情報と回答があります。あなたが良いプログラマーになりたいなら、あなたは良い研究スキルが必要です!!! :)) 自分で問題を調査して解決してください。いくつかのコードを書いてください。それでも問題が解決できない場合は、コピー&ペーストのコードを教えてください:)

+0

うん...ありがとう、あなたに..しかし、私はaddtobackstankの両方を実装し、あまりにもpopbackstack .. –

+0

は、私はこの問題は –

+0

偉大な仕事を解決..私はfrTr.replaceにtehのfrTr.addを()変更の問題を解決し、コード内のTEH backstackをimplmentedブロ:))幸運 –

0

@Override onBackPressed() method as @L.Petrosyan told, inside onBackPressed()get the current position of your viewpager using viewPager.getCurrentItem(); it will return you an int '値。その値を使用してコードを管理します。