2017-05-22 32 views
-2

DialogFragmentのTextViewからMainActivityへのテキストの取得方法、またはDialogFragmentのButtonをクリックしたときのMainActivityのイベントの作成方法嘆願私はこのように次のように試してみてください:しかし、それは問題ではない仕事をします。DialogFragmentからMainactivityへのデータの取得方法

public class MainActivity extends AppCompatActivity { 
    Button b; Button b2; String name; 
    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     name = data.getStringExtra("name").toString(); 
     Toast.makeText(MainActivity.this,name+ "", Toast.LENGTH_LONG).show();} 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button b=(Button)findViewById(R.id.b); 
     b=(Button)findViewById(R.id.b); 
     b2=(Button)findViewById(R.id.b2); 
b.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     b2.setText(name);}});} 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.mainmenu, menu); 
     return true;} 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     FragmentManager manager = getFragmentManager(); 
     fragment afr = new fragment(); 
     afr.setTargetFragment(afr, 1); 
     afr.show(manager, "dialog"); 
     return true;}} 

class fragment extends DialogFragment { 
    View v; Intent intent; EditText t1; Button b1; String name; 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     v = inflater.inflate(R.layout.fragment, container, false); 
     t1=(EditText) v.findViewById(R.id.t1); 
     b1=(Button) v.findViewById(R.id.b1); 
     intent = new Intent(); 
     int resultCode = 1; 
     getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, intent); 
     getDialog().dismiss(); 
     b1.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       name=t1.getText().toString(); 
       intent.putExtra("name", name); 
       fragment.this.dismiss(); 
      }}); return v;}} 
+0

これはまだアクティビティの断片です...これは、オンラインチュートリアルや同様の質問で説明されています – Selvin

答えて

0

インターフェイスを使用できます。 インターフェイスをフラグメントで宣言し、MainActivityで実装します。

https://developer.android.com/training/basics/fragments/communicating.html

DialogFragmentで

public IDialogCallback { 
    void onTextWritted(String text); 
    void onDialogBtnClick() 
} 

は、ダイアログのフィールドを宣言する宣言:

OnDialogCallback mCallback 

後で:

@Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     mCallback = (ITailLiftCallback) context; 
    } 

DialogFragmentでmCallback.onTextWritted()またはmCallback.onDialogBtnClickと呼ぶことができます。最初のケースでは、テキストをTextViewから入力し、2番目のボタンのOnClickListenerに入れます。

次にMainActivity implements IDialogCallbackとするとすべてです! :)

関連する問題