Java 在viewpager片段之间传递参数
我有一个包含两个片段的活动,一个用于列表,一个用于详细信息。我想做的是,每当单击一个列表项时,相关参数都会被发送到detailfragment。但我没能做到 以下是活动:Java 在viewpager片段之间传递参数,java,android,Java,Android,我有一个包含两个片段的活动,一个用于列表,一个用于详细信息。我想做的是,每当单击一个列表项时,相关参数都会被发送到detailfragment。但我没能做到 以下是活动: public class ActivityMain extends ActionBarActivity{ /** * The {@link android.support.v4.view.PagerAdapter} that will provide * fragments for each of the section
public class ActivityMain extends ActionBarActivity{
/**
* The {@link android.support.v4.view.PagerAdapter} that will provide
* fragments for each of the sections. We use a
* {@link FragmentPagerAdapter} derivative, which will keep every
* loaded fragment in memory. If this becomes too memory intensive, it
* may be best to switch to a
* {@link android.support.v4.app.FragmentStatePagerAdapter}.
*/
SectionsPagerAdapter mSectionsPagerAdapter;
/**
* The {@link ViewPager} that will host the section contents.
*/
List<String> naviList = new ArrayList<String>();
ViewPager mViewPager;
private ActionBarDrawerToggle drawerToggle;
private DrawerLayout drawer;
ListView navList;
DrawerAdapter naviAdapter;
private static final int GRAVITY = Gravity.LEFT;
private static final String jsonURL = "";
List<String> categories = new ArrayList<String>();
int check = -1, listCheck = 0;
Dialog d;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
//some methods (e.g. navi-drawer etc.)
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// Sync the toggle state after onRestoreInstanceState has occurred.
drawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.medicalendar_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case R.id.action_settings:
return true;
}
if (drawerToggle.onOptionsItemSelected(item)) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to
* one of the sections/tabs/pages.
*/
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return ListFragment.newInstance("FirstFragment, Default");
case 1:
return DetailFragment.newInstance("DetailFragment, Detail");
default:
return ListFragment.newInstance("FirstFragment, Default");
}
}
@Override
public int getCount() {
return 2;
}
}
private boolean version() {
if (Build.VERSION.SDK_INT > 11) {
return true;
} else {
return false;
}
}
如果你能帮助我,我将不胜感激
最好的,基本上你不需要使用ViewPager从一个片段导航到另一个片段。这应该通过使用FragmentTransaction类替换片段来实现,该类将允许您在事务中传递参数 如果仍然需要ViewPager,则应使用
fragment.setTag(“detail_fragment”)代码>
然后,您的onListItemClick方法应该如下所示:
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//get detail fragment instance by it's tag
DetailFragment detail = (DetailFragment) getActivity().getFragmentManager().findFragmentByTag("detail_fragment");
detail.setParam("data"); //you should define this method in your detail fragment
ViewPager vp = (ViewPager) getActivity().findViewById(R.id.pager);
//clicked item's data to pass next page.
vp.setCurrentItem(1);
}
public void onItemClick(AdapterView父视图、视图视图、整型位置、长id){
//通过标记获取细节片段实例
DetailFragment detail=(DetailFragment)getActivity().getFragmentManager().findFragmentByTag(“detail_fragment”);
setParam(“data”);//您应该在详细信息片段中定义此方法
ViewPager vp=(ViewPager)getActivity().findViewById(R.id.pager);
//单击项目的数据以通过下一页。
副总裁:第(1)项;
}
非常感谢您的回答。如果我没有错,这只用于将参数发送到我的详细信息片段。那么,我如何在我的细节片段中获取这些值呢?对不起,先生,我无法理解您在这里的意思:detail.setParam(“data”)//您应该在detailfragments中定义这个方法。若要将任何参数传递给detailfragment,您需要一个对fragment类实例的引用。这是通过findFragmentByTag()方法实现的。然后在DetailFragment类中创建新方法,并从list fragment调用它。我假设这个方法可以有一个带有字符串参数的setData()名称。但您应该创建任何您需要的方法。
public class DetailFragment extends Fragment {
View v;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
v = inflater.inflate(R.layout.fragment_detail, container, false);
ImageButton imageButton = (ImageButton) v.findViewById(R.id.d_map);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity().getApplicationContext(), "Navigating...", Toast.LENGTH_LONG).show();
}
});
return v;
}
public static DetailFragment newInstance(String text) {
DetailFragment f = new DetailFragment();
Bundle b = new Bundle();
b.putString("msg", text);
f.setArguments(b);
return f;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
}
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//get detail fragment instance by it's tag
DetailFragment detail = (DetailFragment) getActivity().getFragmentManager().findFragmentByTag("detail_fragment");
detail.setParam("data"); //you should define this method in your detail fragment
ViewPager vp = (ViewPager) getActivity().findViewById(R.id.pager);
//clicked item's data to pass next page.
vp.setCurrentItem(1);
}