2017-03-02 11 views
0

私は、フラグメントからダイアログフラグメントにいくつかのデータを渡すことができます。私は渡すデータ関数を実装するためにバンドルを使用します。しかし問題は、プログラムをデバッグしても既に自分のバンドルにすでにデータが入っていることを示していても、私のダイアログのフラグメントにnull値を取得し続けることです。私はバンドルを使用してデータを渡すことができないか、バンドルを使用する方法が間違っていますか?Androidはフラグメントからダイアログフラグメントにデータを渡します

MainActivity

public class MainActivity extends Fragment { 

Button test; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    View h = inflater.inflate(R.layout.activity_main, container, false); 
    test = (Button) h.findViewById(R.id.test); 
    test.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Bundle args = new Bundle(); 
      args.putString("key", "asdasdasdasd"); 
      FragmentDialog newFragment = new FragmentDialog(); 
      newFragment.setArguments(args); 
      newFragment.show(getActivity().getSupportFragmentManager(), "TAG"); 
     } 
    }); 
    onOpenDialog(); 
    return h; 
} 


public void onOpenDialog() 
{ 
    FragmentManager fm = getActivity().getSupportFragmentManager(); 
    FragmentDialog overlay = new FragmentDialog(); 
    overlay.show(fm, "FragmentDialog"); 
} 

}

FragmentDialog

public class FragmentDialog extends DialogFragment 
{ 

private SectionsPagerAdapter sectionsPagerAdapter; 
private ViewPager viewPager; 
TextView textView; 

@Override 
public Dialog onCreateDialog(final Bundle savedInstanceState) 
{ 
    Dialog dialog = super.onCreateDialog(savedInstanceState); 
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    //dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.YELLOW)); 
    dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 
    return dialog; 
} 

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

    // tab slider 
    sectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager()); 

    // Set up the ViewPager with the sections adapter. 
    viewPager = (ViewPager)view.findViewById(R.id.pager); 
    viewPager.setAdapter(sectionsPagerAdapter); 
    textView =(TextView)view.findViewById(R.id.textview); 

    Bundle mArgs = getArguments(); 
    String myValue = mArgs.getString("key"); 
    textView.setText(myValue); 
    return view; 
} 


public class SectionsPagerAdapter extends FragmentPagerAdapter 
{ 

    public SectionsPagerAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     if (position == 0) 
     { 
      // find first fragment... 
      Fragment_Tab_1 ft1 = new Fragment_Tab_1(); 
      return ft1; 
     } 
     if (position == 1) 
     { 
      // find first fragment... 
      Fragment_Tab_2 ft2 = new Fragment_Tab_2(); 
      return ft2; 
     } 
     else if (position == 2) 
     { 
      // find first fragment... 
      Fragment_Tab_3 ft3 = new Fragment_Tab_3(); 
      return ft3; 
     } 

     return null; 
    } 

    @Override 
    public int getCount() { 
     // Show 2 total pages. 
     return 3; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return "First Tab"; 
      case 1: 
       return "Second Tab"; 
      case 2: 
       return "Third Tab"; 
     } 
     return null; 
    } 
} 

}

+0

なぜあなたは 'onOpenDialog()を呼び出している;' 'onCreateView()'で???? –

+0

@BurhanuddinRashid onOpenDialog();私のdialogdragmentからのプロンプトのメッセージを呼び出すことです –

答えて

0

この

お試しください
public void onOpenDialog() 
{ 
    Bundle args = new Bundle(); 
    args.putString("key", "KEY_FROM_OPEN_DIALOG"); 
    FragmentManager fm = getActivity().getSupportFragmentManager(); 
    FragmentDialog overlay = new FragmentDialog(); 
    overlay.setArguments(args); 
    overlay.show(fm, "FragmentDialog"); 
} 
+0

すみません。私には明らかではない。それはあなたを助けたかどうか? – MaxV

+0

ありがとう、私のgetArguementはnull値でまだ得る –

0

この試してみてください:あなたのMainActivityで

を:FragmentDialogのonCreateViewで

FragmentTransaction transection=getFragmentManager().beginTransaction(); 
       FragmentDialog mfragment=new FragmentDialog(); 
       //using Bundle to send data 
       Bundle bundle=new Bundle(); 
       bundle.putString("key","asdasdasdasd"); 
       mfragment.setArguments(bundle); //data being send to SecondFragment 
       transection.replace(R.id.frag, mfragment); 
       transection.commit(); 

を:

String myStr = getArguments().getString("key"); 
     text.setText(myStr); 
+0

ありがとう、それは仕事を傾ける、私のgetArgumentsはまだnull値で得る –

1

あなたがのnewInstance静的Methodeのを使用することができます。

public static FragmentDialog newInstance(int someInt) { 
    FragmentDialog yourFragmentDialog = new FragmentDialog(); 
    Bundle args = new Bundle(); 
    args.putInt("intVariable", someInt); 
    args.putString("stringVariable", someString); 
    yourFragmentDialog.setArguments(args); 

    return yourFragmentDialog; 
} 

し、データを取得する:

getArguments().getInt("intVariable", 0); 

ことができますことを願っています:)

関連する問題