2015-07-28 105 views
1

我有一個導航抽屜(所以我用片段):變化片段鏈接

  • MainActivity(FragmentActivity)
  • 片段A(片段與片段B,C & d圖片鏈接)
  • 片段B(片段)
  • C片段(片段)
  • 片段d(片段)

我的導航抽屜工作正常,但我想我的片段A做菜單這樣的鏈接。眼下,在片段A,我所說的其他片段是這樣的:

ImageView contact = (ImageView) getView().findViewById(R.id.secondBlock); 
contact.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     Fragment fragment = new ContactezNous(); 
     FragmentManager fragmentManager = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(R.id.accueil, fragment); 
     fragmentTransaction.commit(); 
    } 
}); 

但是我不希望用這種方式,因爲我已經找到標籤和其他碎片的IDS問題。

我想知道如何通過點擊鏈接來改變Fragments frome A片段,就像我點擊主活動的導航抽屜鏈接一樣。

主要活動:

public class MainActivity extends AppCompatActivity implements FragmentDrawer.FragmentDrawerListener { 

    private static String TAG = MainActivity.class.getSimpleName(); 
    private Toolbar mToolbar; 
    private FragmentDrawer drawerFragment; 

    //Initialisation de l activite avec les donnees necessaires 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mToolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(mToolbar); 
     getSupportActionBar().setDisplayShowHomeEnabled(true); 
     drawerFragment = (FragmentDrawer) getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); 
     drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), mToolbar); 
     drawerFragment.setDrawerListener(this); 
     // Affichage de la navigation 
     displayView(0); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     //Ajout des items 
     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; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public void onDrawerItemSelected(View view, int position) { 
     displayView(position); 
    } 

    private void displayView(int position) { 
     Fragment fragment = null; 
     String title = getString(R.string.app_name); 
     switch (position) { 
      case 0: 
       fragment = new Accueil(); 
       title = getString(R.string.title_accueil); 
       break; 
      case 1: 
       fragment = new NosOffres(); 
       title = getString(R.string.title_nosoffres); 
       break; 
      case 2: 
       fragment = new DemandeGratuite(); 
       title = getString(R.string.title_demandegratuite); 
       break; 
      case 3: 
       fragment = new ContactezNous(); 
       title = getString(R.string.title_contact); 
       break; 
      case 4: 
       fragment = new Actualites(); 
       title = getString(R.string.title_actu); 
       break; 
      case 5: 
       fragment = new MentionsLegales(); 
       title = getString(R.string.title_mentions); 
       break; 
      default: 
       break; 
     } 

     if (fragment != null) { 
      FragmentManager fragmentManager = getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.container_body, fragment); 
      //fragmentTransaction.addToBackStack("name"); 
      fragmentTransaction.commit(); 
      // libelle du toolbar 
      TextView titlet; 
      titlet = (TextView) findViewById(R.id.main_toolbar_title); 
      titlet.setText(title); 
      titlet.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/GothamBook.ttf")); 
     } 
    } 
} 

enter image description here

+0

我有一個問題來澄清你問的問題。你說你想從'Accueil'片段導航到另一個片段,但是你不想將片段事務代碼包含在'Accueil'中?相反,你希望它回調到你的'MainActivity',並讓它**執行交易? – AutonomousApps

+0

@AutonomousApps是的,因爲有了導航鏈接,我可以回到'accueil',但通過點擊鏈接來關閉應用程序,因爲這是一個交易,我不使用backstack或其他東西... – BJM

回答

1

應使用以下常見的Android碎片模式:

public class Accueil extends Fragment { 
    // Your code here... 

    public interface OnFragmentInteractionListener { 
     void onInteraction(int id); 
    } 

    private OnFragmentInteractionListener mListener; 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     try { 
      mListener = (OnFragmentInteractionListener) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() + " must implement OnFragmentInteractionListener"); 
     } 
    } 

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

    // ...more code... 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // ...initialize your View... 

     ImageView contact = (ImageView) getView().findViewById(R.id.secondBlock); 
     contact.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // This is how you use the listener 
       mListener.onInteraction(3); 
      } 
     }); 

     // ...more initialization... 
    } 
} 

MainActivity.java

public class MainActivity AppCompatActivity 
     implements FragmentDrawer.FragmentDrawerListener, OnFragmentInteractionListener { 
    // Your code here... 

    // Implement OnFragmentInteractionListener 
    @Override 
    public void onInteraction(int id) { 
     // 'id' would be '3' for your 'ContactezNous' fragment 
     displayView(id); 
    } 
} 
+0

但是,我在Accueil Fragment中指定了圖像的OnClickListener?這四個塊是圖片,我希望他們打開片段,如導航 – BJM

+1

看到我的編輯在'#onCreateView()' – AutonomousApps

+0

如此完美!謝謝 ! – BJM