124

DialogFragmentアクションを実行できるように、いくつかの変数をに渡す必要があります。Eclipseは私が使用する必要があることを示唆しています

Fragment#setArguments(Bundle)

しかし、この関数の使い方がわかりません。これを使用して変数をダイアログに渡すにはどうすればよいですか?

4

6 に答える 6

320

使用する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

于 2013-03-17T09:26:34.573 に答える
5

JafarKhQ が指摘したように、フラグメントを操作する一般的な方法として、コンストラクターでパラメーターを渡すのではなく、Bundle.

Fragmentクラスの組み込みメソッドはsetArguments(Bundle)andgetArguments()です。

基本的に、あなたがすることは、すべてのParcelableアイテムをバンドルして送信することです。
次に、フラグメントはそれらのアイテムを取得し、それらにonCreate魔法をかけます。

リンクに示されているDialogFragment方法は、特定のタイプのデータを持つ複数のフラグメントでこれを行う 1 つの方法であり、ほとんどの場合は正常に機能しますが、これを手動で行うこともできます。

于 2013-03-17T09:45:39.687 に答える
1

コトリンを使用する人のために、コトリンで@JafarKhQが言ったことを実行する方法を示したいだけです。これは、彼らを助け、テーマの時間も節約する可能性があります。

したがって、新しいnewInstance関数を作成するには、コンパニオン オブジェクトを作成する必要があります。

関数のパラメータは好きなように設定できます。使用して

 val args = Bundle()

引数を設定できます。

args.putSomthingnewInstance 関数でパラメーターとして指定する引数を追加する ために使用できるようになりました。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)
        }
        ...
    }
..

}
于 2018-05-18T15:17:37.023 に答える