DialogFragment
アクションを実行できるように、いくつかの変数をに渡す必要があります。Eclipseは私が使用する必要があることを示唆しています
Fragment#setArguments(Bundle)
しかし、この関数の使い方がわかりません。これを使用して変数をダイアログに渡すにはどうすればよいですか?
DialogFragment
アクションを実行できるように、いくつかの変数をに渡す必要があります。Eclipseは私が使用する必要があることを示唆しています
Fragment#setArguments(Bundle)
しかし、この関数の使い方がわかりません。これを使用して変数をダイアログに渡すにはどうすればよいですか?
使用する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;
}
そして、このようにArgsを取得します
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mNum = getArguments().getInt("num");
...
}
ここで完全な例を参照してください
http://developer.android.com/reference/android/app/DialogFragment.html
JafarKhQ が指摘したように、フラグメントを操作する一般的な方法として、コンストラクターでパラメーターを渡すのではなく、Bundle
.
Fragment
クラスの組み込みメソッドはsetArguments(Bundle)
andgetArguments()
です。
基本的に、あなたがすることは、すべてのParcelable
アイテムをバンドルして送信することです。
次に、フラグメントはそれらのアイテムを取得し、それらにonCreate
魔法をかけます。
リンクに示されているDialogFragment
方法は、特定のタイプのデータを持つ複数のフラグメントでこれを行う 1 つの方法であり、ほとんどの場合は正常に機能しますが、これを手動で行うこともできます。
コトリンを使用する人のために、コトリンで@JafarKhQが言ったことを実行する方法を示したいだけです。これは、彼らを助け、テーマの時間も節約する可能性があります。
したがって、新しいnewInstance関数を作成するには、コンパニオン オブジェクトを作成する必要があります。
関数のパラメータは好きなように設定できます。使用して
val args = Bundle()
引数を設定できます。
args.putSomthing
newInstance 関数でパラメーターとして指定する引数を追加する
ために使用できるようになりました。putString(key:String,str:String)
たとえば、文字列を追加するなど
arguments.getSomthing(Key:String)
引数を取得するには、 => likeを使用できます
arguments.getString("1")
ここに完全な例があります
class IntervModifFragment : DialogFragment(), ModContract.View
{
companion object {
fun newInstance( plom:String,type:String,position: Int):IntervModifFragment {
val fragment =IntervModifFragment()
val args = Bundle()
args.putString( "1",plom)
args.putString("2",type)
args.putInt("3",position)
fragment.arguments = args
return fragment
}
}
...
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
fillSpinerPlom(view,arguments.getString("1"))
fillSpinerType(view, arguments.getString("2"))
confirmer_virme.setOnClickListener({on_confirmClick( arguments.getInt("3"))})
val dateSetListener = object : DatePickerDialog.OnDateSetListener {
override fun onDateSet(view: DatePicker, year: Int, monthOfYear: Int,
dayOfMonth: Int) {
val datep= DateT(year,monthOfYear,dayOfMonth)
updateDateInView(datep.date)
}
}
}
...
}
ダイアログを作成する方法は、別のクラスでこのようなことを行うことができます
val dialog = IntervModifFragment.newInstance(ListInter.list[position].plom,ListInter.list[position].type,position)
たとえばこのように
class InterListAdapter(private val context: Context, linkedList: LinkedList<InterItem> ) : RecyclerView.Adapter<InterListAdapter.ViewHolder>()
{
...
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
...
holder.btn_update!!.setOnClickListener {
val dialog = IntervModifFragment.newInstance(ListInter.list[position].plom,ListInter.list[position].type,position)
val ft = (context as AppCompatActivity).supportFragmentManager.beginTransaction()
dialog.show(ft, ContentValues.TAG)
}
...
}
..
}