1

我可以从 Activity 中获取 FragmentActivity 中的字符串。但是,如何将我的数据从 FragmentActivity 传递到 Fragments?不过,我可以在 FragmentActivity 中获取我的数据。

(我不想将数据存储在 SharedPreferences 中。)

public class IndividualDetailsActivity extends IndividualBasePager {

    ViewPager mPager;
    IndividualDetailsBaseAdapter mAdapter;
    TitlePageIndicator mIndicator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.individual_pager);
        mAdapter = new IndividualDetailsBaseAdapter(getSupportFragmentManager());
        mPager = (ViewPager) findViewById(R.id.pager);
        mPager.setOffscreenPageLimit(4);
        mPager.setAdapter(mAdapter);
        mIndicator = (TitlePageIndicator) findViewById(R.id.indicator);
        mIndicator.setViewPager(mPager);
        mIndicator.setCurrentItem(1);
        Intent i = getIntent();
        getSupportActionBar().setTitle(i.getStringExtra("name"));
    }
}

public class IndividualBasePager extends SherlockFragmentActivity {
    IndividualDetailsBaseAdapter mAdapter;
    ViewPager mPager;
    PageIndicator mIndicator;

    @Override
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        setTheme(R.style.Theme_Sherlock_Light_DarkActionBar);
        ActionBar actionbar = getSupportActionBar();
        actionbar.setDisplayHomeAsUpEnabled(true);
        setSupportProgressBarIndeterminateVisibility(true);
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            finish();
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}


public class IndividualDetailsBaseAdapter extends FragmentPagerAdapter {
    protected static final String[] CONTENT = new String[] { "Comments",
            "Details", "Screens", "Tutorial" };

    private int mCount = CONTENT.length;

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

    @Override
    public Fragment getItem(int position) {
        Log.e("PAGE", "Position " + position);
        switch (position) {
        case 0:
            return new CommentsFragment();
        case 1:
            return new DetailsFragment();
        case 2:
            return new CommentsFragment();
        case 3:
            return new CommentsFragment();
        }
        return null;
    }

    @Override
    public int getCount() {
        return mCount;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return IndividualDetailsBaseAdapter.CONTENT[position % CONTENT.length];
    }

    public void setCount(int count) {
        if (count > 0 && count <= 10) {
            mCount = count;
            notifyDataSetChanged();
        }
    }
}
4

3 回答 3

1

在您的片段中,您可以通过调用以下方法获取 FragmentActivity getActivity()。并在您的 FragmentActivity 创建一个类似的方法getValue(),它将返回您所需的数据。

于 2013-09-04T10:31:15.460 回答
0

文档建议您使用片段的父活动。您不应该使用片段到片段的通信,以便您可以在其他地方重用片段,如果需要并保持它可重用。话虽如此,我建议使用放在捆绑包上的 Extras。

你把这样的东西:

savedInstanceState.putString("myString", myStingVariable);

你可以像这样得到它们:

myStingVariable = savedInstanceState.getString("myString");

您还需要检查该值是否不为空。

请注意,不同类型的变量有不同的 getter 和 setter。

希望这可以帮助。

于 2013-08-03T12:30:58.927 回答
0

您可以在片段中创建一个 setter 方法,如下所示。从您的活动中,只需调用该方法。

public class IndividualDetailsBaseAdapter extends FragmentPagerAdapter {
protected static final String[] CONTENT = new String[] { "Comments",
        "Details", "Screens", "Tutorial" };

private int mCount = CONTENT.length;

private String name;
public void setName(String name)
{
  this.name=name;
}


public IndividualDetailsBaseAdapter(FragmentManager fm) {
    super(fm);
}
 ... // Rest of your stuff.
 }

您可以从您的活动中调用 setName 方法,如下所示,

mAdapter = new IndividualDetailsBaseAdapter(getSupportFragmentManager());
mAdapter.setName(getIntent().getStringExtra("name"));
于 2013-10-24T07:54:51.457 回答