【问题标题】:Android Studio - Fragment button actionAndroid Studio - 片段按钮操作
【发布时间】:2016-05-31 04:04:33
【问题描述】:

我尝试制作一个在开始时显示片段的应用程序,然后您可以使用第一个片段中的按钮将该片段更改为另一个片段。但是当我将按钮操作放在片段 java 中时,它不会启动并且我得到 nullpointerexception 错误。你能告诉我为什么吗?

public class Fragment_main extends Fragment {

FragmentManager fm = getFragmentManager();

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    Button button_inditas = (Button) getView().findViewById(R.id.button_inditas);
    button_inditas.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            fm.beginTransaction().replace(R.id.content_frame, new Fragment_1()).commit();
        }
    });
    return inflater.inflate(R.layout.fragment_main,container,false);

}
}

【问题讨论】:

    标签: java android android-fragments button fragment


    【解决方案1】:

    但是当我将按钮操作放入片段 java 中时,它不会启动并且我得到 nullpointerexception 错误。你能告诉我为什么吗?

    嗯,我看到你的代码有一些错误......

    首先你不能打电话给getView(),如果你没有充气,这意味着你必须充气一个视图,因为我会给出我的答案,然后你可以避免getView() 并使用 view 本身。

    你必须返回你的View而不是返回充气机

    这就是你的Fragment 的样子:

     public class Fragment_main extends Fragment {
    
        public Fragment_main() {
        }
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main,container,false);
            Button button_inditas = (Button)rootView.findViewById(R.id.button_inditas);
            button_inditas.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
             FragmentManager fragmentManager = getFragmentManager ();
             FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction ();
    
             fragmentTransaction.add (R.id.content_frame, new Fragment_1());
             fragmentTransaction.commit ();
    
    
            });
        return rootView;
    
        }
    }
    

    【讨论】:

    • 它仍然在第 22 行给出错误,所以 fm.beginTransaction().replace(R.id.content_frame, new Fragment_1()).commit();
    • 但我想我只是想出了原因。因为 content_frame 在主要活动布局中而不是在片段布局中。
    • 不,我不知道怎么做。 :/ 我真的是个初学者。
    • 所以你想从一个 Fragment 移动到另一个 Fragment 对吗?
    • 它有效。我只需要替换而不是添加,但它完美无缺。非常感谢。 :)
    【解决方案2】:

    你必须先膨胀视图并使用它返回的视图而不是 getView()。

    View view = inflater.inflate (...);
    

    然后

    ... = (Button) view.findView(...);
    

    出现这种情况是因为getView()返回的视图还没有创建,所以getView()返回null。

    【讨论】:

      猜你喜欢
      • 2017-07-24
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      相关资源
      最近更新 更多