2017-05-06 3 views
0

ログcatは表示されていませんまたはトーストはフラグメント1のデータを表示していません。私は初心者としては難しいインターフェイスを作成したくありません。私はこの2番目の解決策に続きましたlinkフラグメント内のdialogFragmentからデータを受け取ることができません

私のコードを編集してください。
//メインフラグメントコード:私はあなたのコードに推薦う変化の

public class FragmentOne extends Fragment { 
      public static final int PICKER = 1; 
     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_one, container, false); 
      layout=(ViewGroup)rootView.findViewById(R.id.mainLayout); 

      layout.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        FragmentManager fm = getActivity().getSupportFragmentManager(); 
        DFragment dialogFragment = new DFragment(); 
      dialogFragment.setTargetFragment(dialogFragment, PICKER); 
        dialogFragment.show(fm.beginTransaction(), "Sample Fragment"); 

       } 
      }); 
    return rootView; 
     } 
    @Override 
     public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      switch (requestCode) { 
       case PICKER: 
        if (resultCode == Activity.RESULT_OK) { 

         Bundle bundle = data.getExtras(); 

         String size = bundle.getString("size"); 
         Log.i("PICKER", "Got year=" + size + ", yay!"); 

        } else if (resultCode == Activity.RESULT_CANCELED) { 
         Toast.makeText(getActivity(), "user did not entered", Toast.LENGTH_SHORT).show(); 

        } 
        break;}} 

    // Dialog Fragment Code is here : 



    public class DFragment extends DialogFragment implements View.OnClickListener{ 
     Button small, medium, large, xlarge;  

     String size =null; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.dialog, container, 
        false); 

      small = (Button) rootView.findViewById(R.id.small); 
      small.setOnClickListener(this); 
      medium = (Button) rootView.findViewById(R.id.medium); 
      medium.setOnClickListener(this); 
      large = (Button) rootView.findViewById(R.id.large); 
      large.setOnClickListener(this); 
      xlarge = (Button) rootView.findViewById(R.id.xlarge); 
      xlarge.setOnClickListener(this); 
      getDialog().setTitle("DialogFragment Tutorial"); 

      return rootView; 
     } 

     @Override 
     public void onClick(View v) { 
      switch (v.getId()) { 

       case R.id.small: 

        size = small.getText().toString(); 
        dismiss(); 
        break; 

       case R.id.medium: 
        size = medium.getText().toString(); 
        dismiss(); 

        break; 

       case R.id.large: 
        size = large.getText().toString(); 
        dismiss(); 

        break; 
       case R.id.xlarge: 
        size = xlarge.getText().toString(); 
        dismiss(); 
        break; 

       default: 
        break; 
      } 

      Intent i = new Intent(); 
      i.putExtra("size", size); 
getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, i); 
     } 

    } 

答えて

0

はカップル:

  1. 直接ではなく、新たなインスタンスメソッドを使用するダイアログフラグメントのオブジェクトを作成しないでください。リンクのサンプルコード。 [新しいダイアログインスタンスを作成する] [1] https://developer.android.com/reference/android/app/DialogFragment.html

  2. getTargetFragmentは、 に設定されたフラグメントを返します。dialogFragment.setTargetFragment(dialogFragment、PICKER);

    使用:

    dialogFragment.setTargetFragment(このピッカー)。

これは、呼び出しフラグメントをターゲットフラグメントとして設定します。

+0

私は新しいインスタンスメソッドを自分のコードに追加しましたが、ダイアログフラグメントを "this"に置き換えると、 "第1引数の型が間違っています"というようなエラーが返されます。 urのおかげで答える:) –

+0

私の謝罪は具体的ではありません。これにより、私はあなたがダイアログを呼び出すフラグメントのインスタンスを意味しました。 –

関連する問題