2015-07-28 111 views
1

我在fragment1中有按钮。我想点击这个按钮移到和fragment2,但我的应用程序仍接近替代片段1,当我尝试运行它如何在片段中设置按钮侦听器按钮

这是我的代码片段1

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

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

    // gallery = (Gallery) rootView.findViewById(android.R.id.list); 
     //gallery.setAdapter(new ItemAdapter(generateData(), getActivity())); 
     Button button = (Button) rootView.findViewById(R.id.imageButtonAll); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
     public void onClick(View v) { 
       HomeFragment homeFragment = new HomeFragment(); 
       FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
       transaction.replace(R.id.frame_container, homeFragment); 
       transaction.commit(); 

     }  

     });  

     return rootView;  

     } 

    } 
+0

是它表现出一些异常? –

+0

查看logcat以查看是否有异常。 – Jens

回答

2

你不能从另一个片段中打开一个片段。 所以你必须将你的代码从onClick移动到你的活动并在那里运行它。

在您的活动(让我们假设其MainActivity):

public void openMyFragment(){ 
    HomeFragment homeFragment = new HomeFragment(); 
    FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
    transaction.replace(R.id.frame_container, homeFragment); 
    transaction.commit(); 
} 

,然后在你的片段添加此的onClick:

button.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     ((MainActivity) getActivity()).openMyFragement(); 
    } 

}); 
+0

谢谢你的作品。 – siwarak

+0

@siwarak很高兴听到这一点。如果你能接受我的答案,那将是很好的;) – W3hri

1

的问题是,您要更换一种观点认为,在你膨胀的观点中并不存在。你必须从你的FragmentActivity中切换这些片段,它的contentview包含你试图替换的布局。

MainActivity:

class MainActivity extends FragmentActivity { 
    public Fragment frag1; 
    public Fragment frag2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     ... 

     frag1 = new Frag1(); 
     frag2 = new Frag2(); 
     //assumption to switch to frag 1 immediately 
     switchToFragment(R.id.frame_container, homeFragment); 

     ... 
    } 

    /** Switch UI to the given fragment (example) */ 
    void switchToFragment(Fragment newFrag) { 
      getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, newFrag) 
      .commitAllowingStateLoss(); 
     currentFragment = newFrag; 
    } 
} 

片段:

.... 

final Activity activity = getActivity(); 
button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      about.setTextColor(Color.WHITE); 

      if(activity instanceof MainActivity) { 
       ((MainActivity) activity).switchToFragment(((MainActivity) activity).frag1)); 
      } 
     } 
    }); 

...