Updated code:
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
viewPager = (ViewPager)view.findViewById(R.id.base_pager);
FragmentManager manager = getChildFragmentManager();
viewPager.setAdapter(new MyFragmentPagerAdapter(manager));
return rootView;
}
class HomeFragment extends FragmentPagerAdapter {
public HomeFragment(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
#Override
public android.support.v4.app.Fragment getItem(int item) {
// TODO Auto-generated method stub
android.support.v4.app.Fragment fragment = null;
if (item == 0) {
//MapFragment.message("Map");
fragment = new MapFragment();
} else if (item == 1) {
//SavedLocationsFragment.message("locations");
fragment = new MapFragment();
} /*else if (item == 2) {
fragment = new FragmentC();
}*/
return fragment;
}
#Override
public int getCount() {
// TODO Auto-generated method stub
return 2;
}
#Override
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
String title = new String();
if (position == 0) {
title = "Map";
} else if (position == 1) {
title = "savedLocations";
}
return title;
}
}
I am getting error on this onCreateView method;
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
viewPager = (ViewPager)view.findViewById(R.id.base_pager);
FragmentManager manager = getChildFragmentManager();
viewPager.setAdapter(new MyFragmentPagerAdapter(manager));
return rootView;
}
The error are;
The annotation #Override is disallowed for this location
Syntax error on token "View", # expected
Syntax error on token "LayoutInflater", = expected after this token
Syntax error on token "ViewGroup", = expected after this token
Syntax error on token "Bundle", = expected after this token
in your home fragment do this
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.fragment_activity, container, false);
viewPager = (ViewPager)view.findViewById(R.id.base_pager);
FragmentManager manager = getChildFragmentManager();
viewPager.setAdapter(new MyFragmentPagerAdapter(manager));
return view;
}
class MyFragmentPagerAdapter extends FragmentPagerAdapter {
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
#Override
public android.support.v4.app.Fragment getItem(int item) {
// TODO Auto-generated method stub
android.support.v4.app.Fragment fragment = null;
if (item == 0) {
fragment = new PhotoCommnFragment();
} else if (item == 1) {
fragment = new ShowRestaurant();
} /*else if (item == 2) {
fragment = new FragmentC();
}*/
return fragment;
}
#Override
public int getCount() {
// TODO Auto-generated method stub
return 2;
}
#Override
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
String title = new String();
if (position == 0) {
title = "Map";
} else if (position == 1) {
title = "Restaurant";
} else if (position == 2) {
title = "Table 2";
}
return title;
}
}
now from this you would be able to call your child fragment of home, it like this
your mainActivity is mother then you home fragment is child of your mainActivity.
and in your home fragment is hosting Reasturant and Map Fragment.
kindly check how to you dex2jar, if you can't i will mail you relevant code
Related
How to add backstack to viewpager
How do we manage to go to previous fragment from the current fragment
I have got the fragment part working , now I am trying to learn to manage the naviation of fragments by the back button
Here is the main activity which contains three fragments
public class MainActivity extends FragmentActivity {
ViewPager viewpager = null;
LinearLayout lay;
#Override
protected void onCreate(Bundle savedInstancestate) {
// TODO Auto-generated method stub
super.onCreate(savedInstancestate);
setContentView(R.layout.activity_main);
viewpager = (ViewPager) findViewById(R.id.pager);
viewpager.setPageTransformer(true, new DepthPageTransformer());
FragmentManager fragmentManager = getSupportFragmentManager();
viewpager.setAdapter(new myAdaper(fragmentManager));
PagerTitleStrip pagerTitleStrip = (PagerTitleStrip)findViewById(R.id.pager_title_strip);
pagerTitleStrip.setTextSize(TypedValue.COMPLEX_UNIT_SP, 24);
// pagerTitleStrip.setTextColor(Color.BLUE);
}
class myAdaper extends FragmentPagerAdapter {
public myAdaper(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
#Override
public Fragment getItem(int i) {
// TODO Auto-generated method stub
Fragment fragment = null;
if (i == 0) {
fragment = new fragmentA();
}
if (i == 1) {
fragment = new fragmentB();
}
if (i == 2) {
fragment = new fragmentC();
}
return fragment;
}
#Override
public int getCount() {
// TODO Auto-generated method stub
return 3;
}
#Override
public CharSequence getPageTitle(int position) {
String title = new String();
SpannableStringBuilder sb = new SpannableStringBuilder(""+ position);
if (position == 0) {
return "Tab1";
}
if (position == 1) {
return "Tab2";
}
if (position == 2) {
return "Tab3";
}
return null;
}
#Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
}
And the fragments are
public class fragmentA extends Fragment{
#Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment_a,container, false);
}
}
these are repeated with same code just diff color for the other two fragments fragment B and fragment C
now if
I am on fragment C i want ot go back to fragment B and
if I am on Fragment B i want to go to Fragment A
Store in a variable wich is your current page (you can get it with the ViewPager.OnPageChangeListener). Then override the onBackPressed()method of your activity and change to the previous of your viewpager with setCurrentItem(int item)
If you are in the first fragment just call super.onBackPressed()
What I want to do is, pass a sorting variable into specific ViewPager's fragment
My ViewPager is work. I used OnPageChangeListener to get the current fragment and current tab position.
But, when I pass the variable outside the Listener, it always changed to 0
code: currentPos = arg0; (arg0 is returning correct position)
System.out.println("Current:" + currentPos);
All Tab Display result: Current:0
ThirdTab.java:
private PagerSlidingTabStrip tabs;
private ViewPager pager;
private MyPagerAdapter adapter;
public Fragment fragment;
public int currentPos;
public String getSorting() {
return sorting;
}
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.third_tab, container, false);
setHasOptionsMenu(true);
tabs = (PagerSlidingTabStrip) rootView.findViewById(R.id.slidingTabStrip);
pager = (ViewPager) rootView.findViewById(R.id.pager);
adapter = new MyPagerAdapter(getChildFragmentManager(), getActivity().getApplicationContext());
adapter.setTitle(catType);
pager.setAdapter(adapter);
final int pageMargin = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4, getResources()
.getDisplayMetrics());
pager.setPageMargin(pageMargin);
tabs.setViewPager(pager);
pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
#Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
System.out.println("Good" + arg0);
fragment = ((MyPagerAdapter) pager.getAdapter()).getFragment(arg0);
currentPos = arg0;
if (arg0 == 1 && fragment != null) {
fragment.onResume();
}
}
#Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
#Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
});
}
#Override
public boolean onOptionsItemSelected(MenuItem item) {
// handle item selection
switch (item.getItemId()) {
case R.id.menuSortRecentCreate:
case R.id.menuSortRecentUpdate:
case R.id.menuSortLowestPrice:
case R.id.menuSortHighestPrice:
if (item.getItemId() == R.id.menuSortRecentCreate) {
sorting = "0";
} else if (item.getItemId() == R.id.menuSortRecentUpdate) {
sorting = "1";
} else if (item.getItemId() == R.id.menuSortLowestPrice) {
sorting = "2";
} else if (item.getItemId() == R.id.menuSortHighestPrice) {
sorting = "3";
}
System.out.println("Current:" + currentPos);
System.out.println("Current Page:" + pager.getCurrentItem());
return true;
case R.id.action_search:
return true;
case R.id.action_setting:
ThirdTabTaskSettingActivity fragment = new ThirdTabTaskSettingActivity();
mainActivity.pushFragments(getResources().getString(R.string.title_third_tab), fragment, true, true);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
MyPagerAdapter in ThirdTab.java
public class MyPagerAdapter extends FragmentStatePagerAdapter {
private String[] TITLES = {};
private String[] PERSONAL_TITLES = { getString(R.string.personal_category1), getString(R.string.personal_category2), getString(R.string.personal_category3),
getString(R.string.personal_category4), getString(R.string.personal_category5), getString(R.string.personal_category6) };
private String[] BUSINESS_TITLES = { getString(R.string.business_category1), getString(R.string.business_category2), getString(R.string.business_category3),
getString(R.string.business_category4), getString(R.string.business_category5) };
HashMap<Integer, Fragment> hm = new HashMap<Integer, Fragment>();
private Map<Integer, String> mFragmentTags;
private FragmentManager mFragmentManager;
private Context mContext;
public MyPagerAdapter(FragmentManager fm, Context context) {
super(fm);
mFragmentManager = fm;
mFragmentTags = new HashMap<Integer, String>();
mContext = context;
}
public void setTitle(String category) {
if (category.equals("personal")) {
TITLES = PERSONAL_TITLES;
}
else {
TITLES = BUSINESS_TITLES;
}
}
#Override
public CharSequence getPageTitle(int position) {
return TITLES[position];
}
#Override
public int getCount() {
return TITLES.length;
}
#Override
public Fragment getItem(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = ThirdTabContentFragment1.newInstance(position, sorting, keyword);
return fragment;
case 1:
fragment = ThirdTabContentFragment2.newInstance(position, sorting, keyword);
return fragment;
case 2:
fragment = ThirdTabContentFragment3.newInstance(position, sorting, keyword);
return fragment;
case 3:
fragment = ThirdTabContentFragment4.newInstance(position, sorting, keyword);
return fragment;
case 4:
fragment = ThirdTabContentFragment5.newInstance(position, sorting, keyword);
return fragment;
case 5:
fragment = ThirdTabContentFragment6.newInstance(position, sorting, keyword);
return fragment;
}
return fragment;
// return SuperAwesomeCardFragment.newInstance(position, sorting, keyword);
}
#Override
public Object instantiateItem(ViewGroup container, int position) {
System.out.println("instantiate");
Object obj = super.instantiateItem(container, position);
if (obj instanceof Fragment) {
Fragment f = (Fragment) obj;
String tag = f.getTag();
mFragmentTags.put(position, tag);
}
return obj;
}
#Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
public Fragment getFragment(int position) {
System.out.println("In:" + position);
String tag = mFragmentTags.get(position);
if (tag == null) { return null; }
return mFragmentManager.findFragmentByTag(tag);
}
}
ReceiveData's Fragment
public class ThirdTabContentFragment1 extends BaseContainerFragment implements AsyncResponse {
public static ThirdTabContentFragment1 newInstance(int position, String vSorting, String vKeyword) {
ThirdTabContentFragment1 f = new ThirdTabContentFragment1();
Bundle b = new Bundle();
b.putInt(ARG_POSITION, position);
f.setArguments(b);
System.out.println("a" + position);
return f;
}
#Override
public void onResume() {
System.out.println("Resume1");
super.onResume();
}
}
hi every one I'm working on android application that will contain a set for fragments, an the problem I need to make the fragment 1 working only by the menu and not working by finger swab.
and this is my code.
public class MainActivity extends FragmentActivity {
ViewPager viewPager;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.pager);
FragmentManager fm = getSupportFragmentManager();
viewPager.setAdapter(new MyAdapter(fm));
}
}
class MyAdapter extends FragmentPagerAdapter
{
public MyAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
#Override
public Fragment getItem(int i) {
// TODO Auto-generated method stub
Log.d("MASAFA", "get item is called " + i);
Fragment fragment = null;
if (i == 0)
{
fragment = new FragmentA();
}
if (i == 1)
{
fragment = new FragmentB();
}
if (i == 2)
{
fragment = new FragmentC();
}
return fragment;
}
#Override
public int getCount() {
// TODO Auto-generated method stub
Log.d("MASAFA", "get count is called");
return 3;
}
#Override
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
if (position == 0)
{
return "Tab 0";
}
if (position == 1)
{
return "Tab 1";
}
if (position == 2)
{
return "Tab 2";
}
return null;
}
}
I have navigational drawer and fragment for each drawer item. Now Under each fragment we have created multiple fragments using FragmentPagerAdapter.
I've 3 drawer items as Home, Group and Feedback. Under Home, there are 2 fragments i.e My Profile and Logged
so i've created a swipeable tabs for My Profile and Logged and these two fragments are under home item. Now i've to do some network calls in both the fragments(My Profile, Logged) but how to identify which fragment is active on FragmentPagerAdapter? Is it possible to stop adapter to create fragments in advance.
HomeFragment
DrawerModel model = new DrawerModel();
LoggedFragment loggedFrag = new LoggedFragment();
loggedFrag.setTargetFragment(loggedFrag, 0);
model.setFragment(loggedFrag);
dFragments.add(model);
model = new DrawerModel();
model.setDrawerTitle(getString(R.string.profile_tab_title));
model.setFragment(new ProfileFragment());
dFragments.add(model);
Bundle bundle = new Bundle();
bundle.putSerializable("fragments", dFragments);
fragment = new DrawerFragment();
fragment.setArguments(bundle);
navigateFragment(fragment);
DrawerFragment
public class DrawerFragment extends Fragment {
private FragmentAdapter pagerAdapter;
private ViewPager mViewPager;
private ArrayList<DrawerModel> fList;
#SuppressWarnings("unchecked")
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
fList = (ArrayList<DrawerModel>) getArguments().getSerializable(
"fragments");
View v = inflater.inflate(R.layout.swipe_tabs, container, false);
pagerAdapter = new FragmentAdapter(getChildFragmentManager(), fList);
mViewPager = (ViewPager) v.findViewById(R.id.pager);
mViewPager.setAdapter(pagerAdapter);
return v;
}
}
FragmentAdapter
public class FragmentAdapter extends FragmentStatePagerAdapter {
private int TOTAL_TABS = 0;
private ArrayList<DrawerModel> fragmentList;
private SparseArray<Fragment> mPageReference = new SparseArray<Fragment>();
public FragmentAdapter(FragmentManager fm, ArrayList<DrawerModel> fList) {
super(fm);
// TODO Auto-generated constructor stub
TOTAL_TABS = fList.size();
fragmentList = fList;
}
#Override
public Fragment getItem(int position) {
// TODO Auto-generated method stub
return fragmentList.get(position).getDrawerFragment();
}
#Override
public int getCount() {
// TODO Auto-generated method stub
return TOTAL_TABS;
}
#Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
Fragment fragment = (Fragment) super.instantiateItem(container,
position);
mPageReference.put(position, fragment);
Log.d("FragmentAdapter - OnCreate", mPageReference.size() + "");
return fragment;
}
#Override
public CharSequence getPageTitle(int position) {
// TODO Auto-generated method stub
return fragmentList.get(position).getDrawerTitle();
}
#Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
mPageReference.remove(position);
Log.d("FragmentAdapter - onDestroy", mPageReference.size() + "");
super.destroyItem(container, position, object);
}
public Fragment getFragment(int key) {
return mPageReference.get(key);
}
}
Logged Fragment
public class LoggedFragment extends Fragment implements OnClickListener {
TextView tHeader, tEmail, tvPhone;
SharedPreferences sp;
ImageView ivAds;
String bannerUrl = null;
private Handler handler = new Handler();
private static final String TAG = "LoggedFragment";
private void addListeners() {
// TODO Auto-generated method stub
ivAds.setOnClickListener(this);
}
Runnable updateImage = new Runnable() {
#Override
public void run() {
// TODO Auto-generated method stub
if (Utility.checkConnectivity(getActivity()))
new ImageTask((Home_Activity) getActivity(), "Logged")
.execute();
handler.postDelayed(this, Utility.AD_DURATION);
}
};
#Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
if (handler != null)
handler.post(updateImage);
}
#Override
public void onStop() {
// TODO Auto-generated method stub
super.onStop();
if (handler != null)
handler.removeCallbacks(updateImage);
}
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v = inflater.inflate(R.layout.logged_in, container, false);
bindComponents(v);
addListeners();
return v;
}
private void bindComponents(View v) {
// TODO Auto-generated method stub
ivAds = (ImageView) v.findViewById(R.id.ivLoggedAds);
}
public void updateBanner(Bitmap bitmap, String url) {
ivAds.setImageBitmap(bitmap);
bannerUrl = url;
}
}
Call to update fragment method
Fragment fragment = activity.getSupportFragmentManager()
.findFragmentById(R.id.content_frame)
.getTargetFragment();
if (fragment instanceof LoggedFragment) {
LoggedFragment logged = (LoggedFragment) fragment;
logged.updateBanner(result, parameter[1]);
} else
Log.d(TAG, "No Logged Fragment Found");
Now under logged and my profile fragment i need to fetch some data dynamically as soon fragment is visible to user but unable to do so?
Any ideas/suggestions is highly appreciated.
use below code to find your fragment,
FragmentAdapter pa = (FragmentAdapter)viewPager.getAdapter();
pa.getFragment(viewPager.getCurrentItem()).updateBanner();
the code select current visible fragment you can change it to other one by
pa.getFragment(index of other fragment).updateBanner();
you must cast pa.getFragment(viewPager.getCurrentItem()) to what fragment you want for example if at that position it is logged change it to below:
((LoggedFragment)pa.getFragment(viewPager.getCurrentItem()) )
I would say you have two differnt options.
Option one: Use setTargetFragment() and getTargetFragment() so you get a reference to that fragment you need.
Option two: Use the FragmentManager simply get that Fragment you need from the FragmentManager and call that methods you defined on your Fragment.
Hi I have a Swipe Tab Fragment Activity that contains Three Fragments. I created my own adapter that extends FragmentStatePageAdapter.
Now here I'll explain how each tab (Fragments) works.
In Tab 1 and Tab 2, I have a list with practically the same type, when I mean type, I mean they are Symptoms (fever, pain in the eyes, etc.).
Now Tab 3 serves as a tray. Whenever I select an item from the listview in either Tab 1 or Tab 2, I want to transfer that item to Tab 3 and remove that Item from the List where it was selected.
I have tried implementing an Interface but it didn't work for me since I added the fragments on the Main FragmentActivity through an Adapter. MY questions is
How can I communicate the three Fragments? Meaning how can I pass data between these fragment.
Now if you want to take a look at what I've done for now, here it is:
I depicted this as Tab 2 in my question
public class FragmentGeneralSymptoms extends ListFragment implements OnItemClickListener {
ArrayList<String> symptomList;
String name;
String selected;
Tray tray;
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment_generalsymptoms, container,
false);
}
#Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
Bundle args = getArguments();
name = args.getString("key");
tray = (Tray) getActivity();
new LoadSymptoms().execute();
}
class LoadSymptoms extends AsyncTask<String, String, String> {
#Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
KnowledgeBaseHelper helper = new KnowledgeBaseHelper(getActivity());
ProfileHandler handler = new ProfileHandler(getActivity());
Profiles profile = handler.getProfile(name);
String age = profile.getAge() + "";
String gender = profile.getGender();
symptomList = helper.getSymptomList(name, age, gender);
return null;
}
#Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
setListAdapter(new ArrayAdapter<String>(getActivity(),
R.layout.general_list, symptomList));
}
}
#Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
selected = symptomList.get(arg2);
tray.respond(selected);
}
}
My Tab 3
public class FragmentTray extends ListFragment{
private ArrayList<String> selectedList;
public FragmentTray(){}
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment_tray, container, false);
}
public void addToTray(String symptom){
selectedList.add(symptom);
setListAdapter(new ArrayAdapter<String>(getActivity(),
R.layout.general_list, selectedList));
}
public void removeSymptom(String string){
selectedList.remove(selectedList.indexOf(string));
}
}
My MainActivity which Extends FragmentActivity
public class MainActivity extends FragmentActivity implements TabListener, OnPageChangeListener, Tray {
private String selectedProfileName;
ActionBar actionBar;
ViewPager viewPager;
#Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.onCreate(arg0);
setContentView(R.layout.main_activity);
Bundle args = getIntent().getExtras();
selectedProfileName = args.getString("key_name");
viewPager = (ViewPager) findViewById(R.id.main_pager);
viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
viewPager.setOnPageChangeListener(this);
InitializeActionBar();
}
public void InitializeActionBar() {
actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab tabBodyPart = actionBar.newTab();
tabBodyPart.setText("Body Parts");
tabBodyPart.setTabListener(MainActivity.this);
ActionBar.Tab tabGeneralSymptoms = actionBar.newTab();
tabGeneralSymptoms.setText("General Symptoms");
tabGeneralSymptoms.setTabListener(MainActivity.this);
ActionBar.Tab tabSelectedSymptoms = actionBar.newTab();
tabSelectedSymptoms.setText("Selected Symptoms");
tabSelectedSymptoms.setTabListener(MainActivity.this);
actionBar.addTab(tabBodyPart);
actionBar.addTab(tabGeneralSymptoms);
actionBar.addTab(tabSelectedSymptoms);
}
#Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
viewPager.setCurrentItem(tab.getPosition());
}
class MyAdapter extends FragmentStatePagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
#Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
Fragment fragment = null;
Bundle bundle = new Bundle();
bundle.putString("key", selectedProfileName);
if (arg0 == 0) {
fragment = new FragmentBodyPart();
fragment.setArguments(bundle);
}
if (arg0 == 1) {
fragment = new FragmentGeneralSymptoms();
fragment.setArguments(bundle);
}
if (arg0 == 2) {
fragment = new FragmentTray();
}
return fragment;
}
#Override
public int getCount() {
// TODO Auto-generated method stub
return 3;
}
}
#Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
actionBar.setSelectedNavigationItem(arg0);
}
#Override
public void respond(String string) {
// TODO Auto-generated method stub
FragmentTray frag2 = new FragmentTray();
frag2.addToTray(string);
}
}
Finally my Interface
public interface Tray {
public void respond(String string);
}
what I usually do is:
1.- Define the interface. It's done, fine.
2.- Your FragmentGeneralSymptoms must have an initializated listener. Yuou're that but you forgot to set the listener in the class.
public class FragmentGeneralSymptoms extends ListFragment implements OnItemClickListener {
ArrayList<String> symptomList;
String name;
String selected;
Tray tray;
(your code)
public void setTrayListener(Tray listener)
{
tray = listener;
}
#Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
// TODO Auto-generated method stub
selected = symptomList.get(arg2);
if(tray != null)
{
symptomList.remove(selected); // if you want to remove this element from this list
tray.respond(selected);
}
} }
3.- Your FragmentTray class must implement the interface:
public class FragmentTray extends ListFragment implements Tray{
private ArrayList<String> selectedList;
public FragmentTray(){}
#Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return inflater.inflate(R.layout.fragment_tray, container, false);
}
public void addToTray(String symptom){
selectedList.add(symptom);
setListAdapter(new ArrayAdapter<String>(getActivity(),
R.layout.general_list, selectedList));
}
public void removeSymptom(String string){
selectedList.remove(selectedList.indexOf(string));
}
public void respond(String name)
{
// do stuffs!!!!
selectedList.add(new Symtom(name)); // for example
System.out.println("Inside the respond method respond in FragmentTray class");
}
}
4.- And last but not least. When you build the fragments you must register the listener:
class MyAdapter extends FragmentStatePagerAdapter {
private List<Fragment> fragmentList;
public MyAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
fragmentList = new ArrayList<Fragment>();
Fragment fragmentBodyPart = new FragmentBodyPart();
Fragment fragmentTray = new FragmentTray();
Fragment fragmentGeneralSymptoms = new FragmentGeneraSymptoms();
// this is important*********************************
fragmentGeneraSmptoms.setTrayListener(fragmentTray);
fragmentList.add(fragmentBodyPart);
fragmentList.add(fragmentGeneralSymptoms);
fragmentList.add(fragmentTray);
}
#Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
Fragment fragment = null;
Bundle bundle = new Bundle();
bundle.putString("key", selectedProfileName);
if (arg0 == 0) {
fragment = (Fragment) fragmentList.get(0);
fragment.setArguments(bundle);
}
if (arg0 == 1) {
fragment = (Fragment) fragmentList.get(1);
fragment.setArguments(bundle);
}
if (arg0 == 2) {
fragment = (Fragment) fragmentList.get(2);
}
return fragment;
}
#Override
public int getCount() {
// TODO Auto-generated method stub
return fragmentList.size();
}
}
I hope that it helps.