
- Forum posts: 1
Mar 13, 2017, 8:22:16 AM via Website
Mar 13, 2017 8:22:16 AM via Website
Hi guys.
I'm struggling with my question on treehouse.Here is the question:
"I created a new fragment to store our news items. It's called NewsItemFragment.java. When I went to add a constructor to pass in the selected index, Android Studio told me that I shouldn't do that.
Can you please help me by using a bundle to pass the index to my new NewsItemFragment when it is selected? (I added a constant key for the index in NewsItemFragment.java "
and this is the code is like:
MainActivity.java
public class MainActivity extends AppCompatActivity implements NewsFragment.NewsListener {
// New tags for referring to fragments
public static final String NEWS_FRAGMENT = "news_fragment";
public static final String NEWSITEM_FRAGMENT = "newsitem_fragment";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentManager fragmentManager = getFragmentManager();
NewsFragment savedFragment = (NewsFragment) fragmentManager.findFragmentById(R.id.placeholder);
if (savedFragment == null) {
NewsFragment newsFragment = new NewsFragment();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.placeholder, newsFragment);
fragmentTransaction.commit();
}
}
@Override
public void onNewsItemSelected(int index) {
NewsItemFragment fragment = new NewsItemFragment();
// TODO: how do we pass arguments to the new Fragment?
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.placeholder, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
}
NewsItemFragment.java
public class NewsItemFragment extends Fragment {
public static final String KEY_NEWS_ITEM_INDEX = "news_item_index";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// TODO: Hmmm, how do we get this index?
int index = 0;
getActivity().setTitle(News.headlines[index]);
View view = inflater.inflate(R.layout.fragment_newsitem, container, false);
return view;
Fragment fragment = new Fragment(); // replace your custom fragment class
Bundle bundle = new Bundle();
bundle.putInt("index", index); // use as per your need
fragment.setArguments(bundle);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.replace(index,fragment);
fragmentTransaction.commit();
}
@Override
public void onStop() {
super.onStop();
getActivity().setTitle(getResources().getString(R.string.app_name));
}
}
News.java
public class News {
public static String[] headlines = new String[]{
"Treehouse student develops #1 App in Google App Store",
"Oracle and Google decide to hug it out",
"Java8 coming to Android! Is it too late?"
};
}
Please Help!