Android 从 fragment 传递到 dialogfragment 时得到值 null
Android get the value null when passing from fragment to dialogfragment
我有一个问题,我使用 bundle 将数据从片段发送到 dialogfragment,但是当我单击片段布局中的按钮时出现问题,它成功地从片段获取数据,但在我的 dialogfragment 中它得到了空值,当我调试时,我发现我的对话框片段 运行 两次,所以我得到了空值。任何解决这个问题的建议,对不起我的英语,希望能理解我的问题。
这是我将数据传递到我的对话框片段的 onclick
Button[i].setBackgroundColor(0xFF00FF00);
Button[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
TextView test = (TextView)getView().findViewById(R.id.testproductname);
test.setText(pName);
String testproductname = test.getText().toString();
Bundle args = new Bundle();
args.putString("key", testproductname);
FragmentDialog newFragment = new FragmentDialog();
newFragment.setArguments(args);
newFragment.show(getActivity().getSupportFragmentManager(), "TAG");
showTheDialog();
}
});
}
protected void showTheDialog() {
FragmentManager fm = getActivity().getSupportFragmentManager();
FragmentDialog overlay = new FragmentDialog();
overlay.show(fm, "FragmentDialog");
}
片段对话框
public class FragmentDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
//dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.YELLOW));
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
return dialog;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {
View view = inflater.inflate(R.layout.prompt_quantity, container);
// tab slider
sectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager());
// Set up the ViewPager with the sections adapter.
viewPager = (ViewPager) view.findViewById(R.id.modifierpager);
viewPager.setAdapter(sectionsPagerAdapter);
Bundle mArgs = getArguments();
pName = mArgs.getString("key","asdasd");
final TextView tpn = (TextView)getView().findViewById(R.id.gtestproductname);
tpn.setText(pName);
}
newFragment.show(getActivity().getSupportFragmentManager(), "TAG");
showTheDialog();
你不需要调用两次显示,这个逻辑绘制了两次视图。这就是为什么你有异常。删除第二个。
我有一个问题,我使用 bundle 将数据从片段发送到 dialogfragment,但是当我单击片段布局中的按钮时出现问题,它成功地从片段获取数据,但在我的 dialogfragment 中它得到了空值,当我调试时,我发现我的对话框片段 运行 两次,所以我得到了空值。任何解决这个问题的建议,对不起我的英语,希望能理解我的问题。
这是我将数据传递到我的对话框片段的 onclick
Button[i].setBackgroundColor(0xFF00FF00);
Button[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
TextView test = (TextView)getView().findViewById(R.id.testproductname);
test.setText(pName);
String testproductname = test.getText().toString();
Bundle args = new Bundle();
args.putString("key", testproductname);
FragmentDialog newFragment = new FragmentDialog();
newFragment.setArguments(args);
newFragment.show(getActivity().getSupportFragmentManager(), "TAG");
showTheDialog();
}
});
}
protected void showTheDialog() {
FragmentManager fm = getActivity().getSupportFragmentManager();
FragmentDialog overlay = new FragmentDialog();
overlay.show(fm, "FragmentDialog");
}
片段对话框
public class FragmentDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
//dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.YELLOW));
dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
return dialog;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {
View view = inflater.inflate(R.layout.prompt_quantity, container);
// tab slider
sectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager());
// Set up the ViewPager with the sections adapter.
viewPager = (ViewPager) view.findViewById(R.id.modifierpager);
viewPager.setAdapter(sectionsPagerAdapter);
Bundle mArgs = getArguments();
pName = mArgs.getString("key","asdasd");
final TextView tpn = (TextView)getView().findViewById(R.id.gtestproductname);
tpn.setText(pName);
}
newFragment.show(getActivity().getSupportFragmentManager(), "TAG");
showTheDialog();
你不需要调用两次显示,这个逻辑绘制了两次视图。这就是为什么你有异常。删除第二个。