gio*_*ozh 110 android android-dialogfragment
我需要传递一些变量DialogFragment,所以我可以执行一个动作.Eclipse建议我应该使用
Fragment#setArguments(Bundle)
Run Code Online (Sandbox Code Playgroud)
但我不知道如何使用这个功能.如何使用它将变量传递给对话框?
Jaf*_*KhQ 285
运用 newInstance
public static MyDialogFragment newInstance(int num) {
MyDialogFragment f = new MyDialogFragment();
// Supply num input as an argument.
Bundle args = new Bundle();
args.putInt("num", num);
f.setArguments(args);
return f;
}
Run Code Online (Sandbox Code Playgroud)
并得到像这样的Args
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mNum = getArguments().getInt("num");
...
}
Run Code Online (Sandbox Code Playgroud)
请参阅此处的完整示例
http://developer.android.com/reference/android/app/DialogFragment.html
Sam*_*Sam 18
我曾经从listview发送一些值
如何发送
mListview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
Favorite clickedObj = (Favorite) parent.getItemAtPosition(position);
Bundle args = new Bundle();
args.putString("tar_name", clickedObj.getNameTarife());
args.putString("fav_name", clickedObj.getName());
FragmentManager fragmentManager = getSupportFragmentManager();
TarifeDetayPopup userPopUp = new TarifeDetayPopup();
userPopUp.setArguments(args);
userPopUp.show(fragmentManager, "sam");
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
如何接收 DialogFragment的onCreate()方法
Bundle mArgs = getArguments();
String nameTrife = mArgs.getString("tar_name");
String nameFav = mArgs.getString("fav_name");
String name = "";
Run Code Online (Sandbox Code Playgroud)
// Kotlin上传
val fm = supportFragmentManager
val dialogFragment = AddProgFargmentDialog() // my custom FargmentDialog
var args: Bundle? = null
args?.putString("title", model.title);
dialogFragment.setArguments(args)
dialogFragment.show(fm, "Sample Fragment")
Run Code Online (Sandbox Code Playgroud)
//收到
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (getArguments() != null) {
val mArgs = arguments
var myDay= mArgs.getString("title")
}
}
Run Code Online (Sandbox Code Playgroud)
所以有两种方法可以将值从片段/活动传递到对话框片段:-
使用 make setter 方法创建对话框片段对象并传递值/参数。
通过 bundle 传递值/参数。
// Fragment or Activity
@Override
public void onClick(View v) {
DialogFragmentWithSetter dialog = new DialogFragmentWithSetter();
dialog.setValue(header, body);
dialog.show(getSupportFragmentManager(), "DialogFragmentWithSetter");
}
// your dialog fragment
public class MyDialogFragment extends DialogFragment {
String header;
String body;
public void setValue(String header, String body) {
this.header = header;
this.body = body;
}
// use above variable into your dialog fragment
}
Run Code Online (Sandbox Code Playgroud)
注意:- 这不是最好的方法
// Fragment or Activity
@Override
public void onClick(View v) {
DialogFragmentWithSetter dialog = new DialogFragmentWithSetter();
Bundle bundle = new Bundle();
bundle.putString("header", "Header");
bundle.putString("body", "Body");
dialog.setArguments(bundle);
dialog.show(getSupportFragmentManager(), "DialogFragmentWithSetter");
}
// your dialog fragment
public class MyDialogFragment extends DialogFragment {
String header;
String body;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
header = getArguments().getString("header","");
body = getArguments().getString("body","");
}
}
// use above variable into your dialog fragment
}
Run Code Online (Sandbox Code Playgroud)
注意:- 这是最好的方法。
作为使用Fragments的一般方式,正如JafarKhQ指出的那样,你不应该在构造函数中传递params,而是使用Bundle.
类中的内置方法Fragment是setArguments(Bundle)和getArguments().
基本上,你所做的就是设置一个包含所有Parcelable物品的捆绑包并发送它们.
反过来,你的片段会将这些物品放入其中onCreate并对它们起到魔力.
DialogFragment链接中显示的方式是在具有一种特定类型数据的多出现片段中执行此操作的一种方法,并且大部分时间都可以正常工作,但您也可以手动执行此操作.
| 归档时间: |
|
| 查看次数: |
102689 次 |
| 最近记录: |