-2

I'm getting the error code I've printed below. I'm trying to use fragments and on my first fragment, i want to give users a choice of options using a spinner. To me it seems most logical to have this within my fragment1 class. However it doesn't seem to work. Furthermore at the moment my code works by calling the fragment 1 straight away, like my main activity.xml isn't shown (i'm not sure if this is correct or not, i'm a newb when it comes to android app development).

I'm getting the error on the ArrayAdapter call, marking 'this' as the culprate.

Fragment

public class Page1Fragment extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
                savedInstanceState) {

            View view = inflater.inflate(R.layout.page1_fragment, container, false);


            Spinner spinner = (Spinner) view.findViewById(R.id.spinner);
    // Create an ArrayAdapter using the string array and a default spinner layout
            ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, //this is where the error is called
                    R.array.planets_array, android.R.layout.simple_spinner_item);
    // Specify the layout to use when the list of choices appears
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    // Apply the adapter to the spinner
            spinner.setAdapter(adapter);

            return view;

        }



    }

Main Activity

package provider.ac.stir.ac.uk.finallab;

import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);



        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
        tabLayout.addTab(tabLayout.newTab().setText(R.string.tab_page1));
        tabLayout.addTab(tabLayout.newTab().setText(R.string.tab_page2));
        tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
        final ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        final PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager(),
                tabLayout.getTabCount());
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new
                TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }
            @Override
            public void onTabUnselected(TabLayout.Tab tab) {}
            @Override
            public void onTabReselected(TabLayout.Tab tab) {}
        });



    }
}

Error

Wrong 1st argument type. Found: 'provider.ac.tir.ac.uk.finallab.Page1Fragment', required: 'android.content.Context
  • Possible duplicate of [Argument this doesn´t work. \[required: 'android.content.context'](https://stackoverflow.com/questions/35816602/argument-this-doesn%c2%b4t-work-required-android-content-context) – Vladyslav Matviienko Nov 23 '18 at 06:40

1 Answers1

0

ArrayAdapter.createFromResource expects a Context, and Fragment is not a Context, so try with its Activity. Simply change:

ArrayAdapter.createFromResource(this, R.array.planets_array, android.R.layout.simple_spinner_item);`

To:

ArrayAdapter.createFromResource(getActivity(), R.array.planets_array, android.R.layout.simple_spinner_item);`
Aaron
  • 3,764
  • 2
  • 8
  • 25