2013-08-03 3 views
1

Я могу получить String в FragmentActivity из Activity. Однако как передать данные из FragmentActivity в Fragments? Однако я могу получить свои данные в FragmentActivity.Передача строки из FragmentActivity to Fragment

(Я не хочу, чтобы хранить данные в 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(); 
     } 
    } 
} 

ответ

0

документация рекомендует использовать родительскую активность фрагмента. Вы не должны использовать фрагмент для фрагментации связи, чтобы вы могли повторно использовать фрагмент в других местах, если это необходимо, и использовать его повторно. Сказав это, я бы предложил использовать Extras, которые размещены на комплекте.

Вы кладете вещи, как это:

savedInstanceState.putString("myString", myStingVariable); 

и вы можете получить их, как это:

myStingVariable = savedInstanceState.getString("myString"); 

Вы также хотите, чтобы проверить, что значение не равно нулю.

Обратите внимание, что существуют разные геттеры и сеттеры для разных типов переменных.

Надеюсь, это поможет.

1

В вашем фрагменте вы можете получить FragmentActivity, вызвав следующий метод: getActivity(). И в вашем FragmentActivity создайте такой метод, как getValue(), который вернет вам нужные данные.

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