我在片段中有一个按钮,我需要能够在活动中访问它来更改它的文本。我在我的主要活动中使用此代码:
CategoryFragment frag = new CategoryFragment();
getSupportFragmentManager().beginTransaction().add(R.id.activity_main, frag).commit();
frag.setButtonText(i);
问题是按钮永远不会使用onCreateView()方法初始化(该方法永远不会被调用),这会导致空指针异常。我尝试在片段中添加一个onCreate()方法,它被调用,但我必须获取视图才能初始化我的按钮。由于视图尚未初始化,我从视图中获得另一个空指针异常。这是我在onCreate()上的最佳尝试:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
button = (Button) getView().findViewById(R.id.buttonFrag);
}
答案 0 :(得分:1)
在OnCreateView()
中这样做:
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.yout_layout, container, false);
button = (Button) rootView.findViewById(R.id.buttonFrag);
return rootView;
}
答案 1 :(得分:1)
你完全误解了Fragment和Activity相互协作的方式。活动主要有责任显示"片段,您需要使用CategoryFragment
类初始化Button。
覆盖Category Fragment
' onActivityCreated()
,然后添加以下内容:
Button button = (Button) getView.findViewById(R.id.your_views_id);
button.setButton("Voila");
答案 2 :(得分:0)
关于活动和片段交互的研究。这可能对你有帮助。 http://simpledeveloper.com/how-to-communicate-between-fragments-and-activities/
答案 3 :(得分:0)
您可以使用“静态工厂方法”参考以下代码
public class CategoryFragment extends Fragment {
/**
* Static factory method that takes an int parameter,
* initializes the fragment's arguments, and returns the
* new fragment to the client.
*/
public static CategoryFragment newInstance(String i) {
CategoryFragment f = new CategoryFragment();
Bundle args = new Bundle();
args.putInt("buttonText", i);
f.setArguments(args);
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam = getArguments().getString("buttonText");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view=inflater.inflate(R.layout.fragment_category, container, false);
Button b=(Button) view.findViewById(R.id.button);
b.setText(mParam);
return view;
}
}
并从您的活动中致电
getSupportFragmentManager().beginTransaction().add(R.id.activity_main, CategoryFragment.newInstance(i)).commit();