2016-04-05 4 views
1

У меня есть проблема У меня есть три кнопки в моей деятельности, и при нажатии одной кнопкой я хочу открыть определенный фрагмент. Как я могу это сделать? Это мой кодAndroid Fragments

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     bt1 = (Button) findViewById(R.id.button1); 
     bt2 = (Button) findViewById(R.id.button2); 
     bt3 = (Button) findViewById(R.id.button3); 

     bt1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); 
       android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
       if (bt1.isClickable()){ 
        Fragment_one f1 = new Fragment_one(); 
        fragmentTransaction.add(R.id.fragment_container, f1); 
        fragmentTransaction.addToBackStack(null); 
        fragmentTransaction.commit(); 
       } 
      } 
     }); 
+2

Таким образом, именно то, что этот вопрос вы столкнулись? –

+0

Shadab Я сделал это, но я получил сообщение об ошибке, когда я перехожу к другому фрагменту. –

+0

Я делаю то же самое, что и для других кнопок. –

ответ

0

Попробуйте сделать так:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    bt1 = (Button) findViewById(R.id.button1); 
    bt2 = (Button) findViewById(R.id.button2); 
    bt3 = (Button) findViewById(R.id.button3); 

    bt1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // use either changeFragment() or replaceFragment methods to switch between your fragments 
      Fragment_one f1 = new Fragment_one(); 
      changeFragment(f1); 
      // replaceFragment(f1); 
     } 
    }); 

// this method will add a fragment if it not exist or show it if exists 
public void changeFragment(Fragment fragment) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction transaction = fragmentManager.beginTransaction(); 

    String tag = fragment.getClass().getName(); 
    // Check if fragment was added already 
    boolean alreadyAdded = fragmentManager.findFragmentByTag(tag) != null; 

    // hide all added fragments 
    List<Fragment> fragments = fragmentManager.getFragments(); 
    if (fragments != null) { 
     for (Fragment f : fragments) { 
      transaction.hide(f); 
     } 
    } 

    // if the given fragment is added already just show it 
    // if not then add it 
    if (alreadyAdded) { 
     transaction.show(fragment); 
    } else { 
     transaction.add(R.id.fragment_container, fragment, tag); 
     // add to back stack will store just added fragments 
     transaction.addToBackStack(tag); 
    } 
    transaction.commit(); 
} 

// this method will replace current fragment with the given one 
public void replaceFragment(Fragment fragment) { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    FragmentTransaction transaction = fragmentManager.beginTransaction(); 
    String tag = fragment.getClass().getName(); 
    transaction.replace(R.id.fragment_container, fragment, tag); 
    transaction.addToBackStack(tag); 
    transaction.commit(); 
} 

Вам не нужно, чтобы проверить, если кнопка кликабельна в OnClick(), потому что если это не кликабельна OnClick () не будет называться вообще

+0

Спасибо, что это работает –

+0

Добро пожаловать) –

+0

@ AmidouFlorianTouré, если этот или любой ответ решил ваш вопрос, пожалуйста, рассмотрите [его принятие] (http://meta.stackexchange.com/q/5234/179419), нажав на check- отметка. Это указывает более широкому сообществу, что вы нашли решение и дали некоторую репутацию как самому, так и самому себе. Это не обязательно. – Sufian

0

На вашем OnClickListener Метод добавьте этот простой код.

FragmentManager frgManager3 = getActivity().getSupportFragmentManager(); 
    frgManager3.beginTransaction() 
    .replace(R.id.content_frame, new FragmentOne()) 
    .addToBackStack(null) 
    .commit(); 

И вам не нужно проверять, доступна ли кнопка Clickable или нет.

0

попробовать этот метод

package iwannado.com.ormliteapplication; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 

    import android.widget.Button; 


    public class YourActivity extends AppCompatActivity implements View.OnClickListener{ 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      bt1 = (Button) findViewById(R.id.button1); 
      bt2 = (Button) findViewById(R.id.button2); 
      bt3 = (Button) findViewById(R.id.button3); 
      bt1.setOnClickListener(this); 
      bt2.setOnClickListener(this); 
      bt3.setOnClickListener(this); 
     } 

     @Override 
     public void onClick(View v) { 
      int id = v.getId(); 
      switch (id){ 
       R.id.button1: 
       replaceFragmentInActivity(new Fragment_one()); 
       break; 
       R.id.button2: 
       replaceFragmentInActivity(new Fragment_two()); 
       break; 
       R.id.button3: 
       replaceFragmentInActivity(new Fragment_three()); 
       break; 
      } 
     } 
     public void replaceFragmentInActivity(Fragment fragment) { 
      FragmentManager fragmentManager = getSupportFragmentManager(); 
      FragmentTransaction transaction = fragmentManager.beginTransaction(); 
      transaction.replace(R.id.fragment_container, fragment); 
      transaction.commit(); 
     } 
    }