Android 如何在片段中设置Listener to按钮
我有一个零碎的按钮。我想点击这个按钮,用fragment2替换fragment1,但当我尝试运行它时,我的应用程序仍然关闭 这是我在fragment1中的代码Android 如何在片段中设置Listener to按钮,android,android-fragments,Android,Android Fragments,我有一个零碎的按钮。我想点击这个按钮,用fragment2替换fragment1,但当我尝试运行它时,我的应用程序仍然关闭 这是我在fragment1中的代码 @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View rootView = inflater.in
@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;
}
}
不能从另一个片段内部打开片段。 因此,您必须将代码从onClick移动到活动并在那里运行 在您的活动中(假设其主要活动): 然后,在片段onClick中添加以下内容:
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((MainActivity) getActivity()).openMyFragement();
}
});
问题是,您试图替换的视图在正在膨胀的视图中不存在。您必须从FragmentActivity中切换这些片段,该活动具有包含您试图替换的布局的contentview main活动:
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));
}
}
});
...
片段:
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));
}
}
});
...
它是否显示了一些异常?查看日志以查看是否出现异常。@siwarak很高兴听到这个消息。如果你能接受我的回答,那就太好了;)