在我的应用程序中,我有一个对话框片段,它在启动MainActivity之前首先打开。当在该对话框片段中输入一些数据并单击“确认”时,我需要向片段(Main)发送一些值(表示双值)。
我的主要活动是查看寻呼机,它有两个片段。一个是片段(主)。。我必须将数据发送到我的对话框片段到片段(main)
片段(Main)通过viewpager附加到MainActivity。我尝试使用intent和bundle将值发送到fragment(Main)。引用站点以在片段之间传递数据。
通过使用Intents,它显示了无法显式显示的异常,并在android清单中声明
当尝试使用bundle时,获取异常bundle为null。
从这两个例外,我有可能发送数据...任何人都可以提供帮助和建议。
这是我的对话片段:
public class InputFragment extends DialogFragment {
public InputFragment() {
// Required empty public constructor
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return super.onCreateDialog(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.input, container, false);
final EditText ed = (EditText)view.findViewById(R.id.editText);
final RadioButton rb1 = (RadioButton)view.findViewById(R.id.radioButton1);
final RadioButton rb2 = (RadioButton)view.findViewById(R.id.radioButton2);
final Button b1 = (Button)view.findViewById(R.id.cancel);
final Button b2 = (Button)view.findViewById(R.id.confirm);
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!ed.getText().toString().equals("")) {
if (rb1.isChecked()) {
int input = Integer.valueOf(ed.getText().toString());
double out = input / 24.0;
out = Double.parseDouble(new DecimalFormat("#.0").format(out));
Intent m = new Intent(getActivity().getBaseContext(), MainScreen.class);
m.putExtra("res", out);
getActivity().startActivity(m);
} else if (rb2.isChecked()) {
int input = Integer.valueOf(ed.getText().toString());
double out = ((input * 2 / 3) * 0.029574);
out = Double.parseDouble(new DecimalFormat("#.0").format(out));
Intent m = new Intent(getActivity().getBaseContext(), MainScreen.class);
m.putExtra("res", out);
getActivity().startActivity(m);
}
}
}
});
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
return view;
}
接收数据的片段(Main):
public class MainScreen extends Fragment {
double ram;
TextView gls;
MainScreen mainScreen;
public MainScreen() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.main_screen, container, false);
mainScreen = this;
TextView textView = (TextView)view.findViewById(R.id.res);
Intent r = getActivity().getIntent();
double res = r.getDoubleExtra("res", 0);
String result = Double.toString(res);
textView.setText(result);
ram = Double.parseDouble(textView.getText().toString());
gls = (TextView) view.findViewById(R.id.glasses);
FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DiaFragment df = new DiaFragment();
df.setCallingFragment(mainScreen);
df.show(getFragmentManager(),"Frag");
}
});
return view;
}
上面我是故意的,
通过使用bundle:在我的片段中(Main)
Bundle mbundle = mainScreen.getArguments();
double res = mbundle.getDouble("res",0);
String result = Double.toString(res);
textView.setText(result);
对话片段:
InputFragment inputFragment = new InputFragment();
Bundle bundle = new Bundle();
bundle.putDouble("res",out);
inputFragment.setArguments(bundle);
1.create界面:
public interface OnReceivedData {
public void onDataReceived(Objects objects);
}
2.create对话框:
public class Dialog extends DialogFragment {
private OnReceivedData mData;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mData=(OnReceivedData) activity;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// create dialog
senDataToActivity();
}
private void senDataToActivity() {
mData.onDataReceived("your object");
}
}
3.调用对话框:
public class MainActivity extends AppCompatActivity implements OnReceivedData {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
private void opneDialog(){
//
}
@Override
public void onDataReceived(Objects objects) {
// receded data
// do something
}
}
您不能这样调用片段:
Intent m = new Intent(getActivity().getBaseContext(), MainScreen.class);
取而代之的是:
MainScreen fragment = new MainScreen();
FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(id, fragment , "MainScreen");
ft.addToBackStack("");
ft.commit();
我想在片段的活动中使用一些文本视图(cityField,updatedField)。我知道在活动中使用它们会更容易,但问题是,由于要获取一些JSON数据,我不得不在Fragment上加入一些代码 我已经得到了活动代码的ID 现在我想在我的片段中使用它们 所以问题是 - 这可能吗?如果可能,如何? 我已经检查了这个网站上的一些答案 - 在Android中将数据从活动发送到片段 如何使用捆绑包将数据从
我需要将数据从片段发送到另一个活动 我在Homeactive下的LoadsFraank中使用此代码 在另一个活动(LoadActivity)中接收数据 但是意图没有附加条件 请看下面的截图
我有一个包含EditText的片段,当我单击该EditText时,会出现一个DatePicker对话框来选择日期。 FragmentFile 对话框片段 问题是我不知道如何将数据(选定日期)从DialogFraank传递到片段? 我读了一些主题,但这并没有帮助我感到困惑(抱歉再次提出这个问题)。 主题1主题2
次要活动(通过意图向主活动发送“endpoint”字符串): 主活动(从次要活动获取字符串): 在Fragment类上,我试图在TextView上显示数据: 如何修复它并将字符串从一个活动发送到另一个活动上的片段? 下面是XML:
我有一个活动,它从其他活动中获取一些字符串: 这行得通。 从这个活动< code>ShowPoints中,我想将接收到的字符串< code>points发送到它的片段< code>PointsOnMap 为此,我创建了并执行以下操作: 但是,片段<code>PointsOnMap<code>的<code>字符串点 我想知道我做错了什么。我在这里阅读了其他一些帖子,似乎我正在以正确的方式做到这一点。