2017-03-02 150 views
0

我设法将片段中的一些数据传递给对话框片段,我使用bundle来实现传递数据功能。但问题是我保持在我的对话框片段中的空值,即使当我调试程序已经显示我的包已经包含数据。是它我不能使用包来传递数据或我的方式来使用包是错误的。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仍然得到空值 –

0

试试这个:

在您的MainActivity:

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(); 

在FragmentDialog的onCreateView:

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

谢谢,它不能工作,我的getArguments仍然得到空值 –

1

您可以使用静态的newInstance梅索德:

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); 

希望它能帮助:)

相关问题