2016-08-06 8 views
0

Я пытаюсь создать тост изнутри моего фрагмента. Я искал часы в Интернете, и все, с чем я сталкиваюсь, похоже, не работает.Android: Тост в приложении с вкладками и следующая страница onclick в приложении с вкладками

information.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        Toast toast = Toast.makeText(getActivity().getBaseContext(), "This information will not be published in the world wide web, but will be saved on your own device instead", Toast.LENGTH_SHORT); 
        toast.show(); 
        toast.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL, 0, 0); 
       } 
      });  

'getActivity' красный. При наведении указатель говорит: «не может решить метод getActivity() '". Если удалить getActivity, и использовать только getBaseContext() или getApplicationContext(), это говорит о том, что нестатическая метод не может ссылаться из статического контекста. Может ли кто-нибудь научить меня, как создать этот конкретный тост?

Я использовал стандартное приложение для вкладок в галерее от Android Studio. Вот мой код (вы найдете его в самом низу):

public class ApplicationFragments extends AppCompatActivity { 
     private SectionsPagerAdapter mSectionsPagerAdapter; 
     private ViewPager mViewPager; 

     //get widgets voor alle functies 
     private static View rootView; 

     //variable 
     private static int section; 
     //fragment1 
     static ImageButton information; 
     static int addOneSex; 
     static int addOneWeight; 
     static int addOneAge; 
     static ImageView plusSex; 
     static ImageView plusWeight; 
     static ImageView plusAge; 
     static TextView sex; 
     static TextView weight; 
     static TextView age; 

     //fragment2 
     static int addOneHour; 
     static int addOneBeer; 
     static int addOneWine; 
     static int addOneShot; 
     static ImageView plusBeers; 
     static ImageView plusWines; 
     static ImageView plusShots; 
     static TextView plusHours; 
     static TextView amountOfHours; 
     static TextView amountOfBeers; 
     static TextView amountOfWines; 
     static TextView amountOfShots; 

     //fragment3 

     //all fragments 
     static Button btnNext; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      //verander animatie 
      overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.fade_out); 

      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_information); 

      // Create the adapter that will return a fragment for each of the three 
      // primary sections of the activity. 
      mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

      // Set up the ViewPager with the sections adapter. 
      mViewPager = (ViewPager) findViewById(R.id.container); 
      mViewPager.setAdapter(mSectionsPagerAdapter); 
     } 

     public static class PlaceholderFragment extends Fragment { 
      private static final String ARG_SECTION_NUMBER = "section_number"; 

      public static PlaceholderFragment newInstance(int sectionNumber) { 
       PlaceholderFragment fragment = new PlaceholderFragment(); 
       Bundle args = new Bundle(); 
       args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
       fragment.setArguments(args); 
       return fragment; 
      } 

      //bij het creëren van een tab 
      @Override 
      public View onCreateView(LayoutInflater inflater, ViewGroup container, 
            Bundle savedInstanceState) { 
       rootView = inflater.inflate(R.layout.fragment_information, container, false); 

       //set xml 
       section = getArguments().getInt(ARG_SECTION_NUMBER); 
       if (section == 1) { 
        rootView = inflater.inflate(R.layout.fragment_information, container, false); 
        GenerateFragment1(); 
       } 
       if (section == 2) { 
        rootView = inflater.inflate(R.layout.fragment_drinks, container, false); 
        GenerateFragment2(); 
       } 
       if (section == 3) { 
        rootView = inflater.inflate(R.layout.fragment_calculate, container, false); 
        GenerateFragment3(); 
       } 
       return rootView; 
      } 
     } 

     //geef de juiste pagina terug 
     public class SectionsPagerAdapter extends FragmentPagerAdapter { 
      public SectionsPagerAdapter(FragmentManager fm) { 
       super(fm); 
      } 

      @Override 
      public Fragment getItem(int position) { 
       return PlaceholderFragment.newInstance(position + 1); 
      } 

      @Override 
      public int getCount() { 
       //hoeveelheid pagina's 
       return 3; 
      } 

      @Override 
      public CharSequence getPageTitle(int position) { 
       switch (position) { 
        case 0: 
         return "SECTION 1"; 
        case 1: 
         return "SECTION 2"; 
        case 2: 
         return "SECTION 3"; 
       } 
       return null; 
      } 
     } 

     //fragment 1 
     public static void GenerateFragment1(){ 
      information = (ImageButton) rootView.findViewById(R.id.imgBtnInfo); 
      sex = (TextView) rootView.findViewById(R.id.etSex); 
      weight = (TextView) rootView.findViewById(R.id.etWeight); 
      age = (TextView) rootView.findViewById(R.id.etAge); 
      plusSex = (ImageView) rootView.findViewById(R.id.btnSex); 
      plusWeight = (ImageView) rootView.findViewById(R.id.btnWeight); 
      plusAge = (ImageView) rootView.findViewById(R.id.btnAge); 
      btnNext = (Button) rootView.findViewById(R.id.btnNext); 

      plusSex.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        addOneSex = Integer.parseInt(sex.getText().toString()); 
        addOneSex++; 
        sex.setText(Integer.toString(addOneSex)); 
       } 
      }); 

      plusWeight.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        addOneWeight = Integer.parseInt(weight.getText().toString()); 
        addOneWeight++; 
        weight.setText(Integer.toString(addOneWeight)); 
       } 
      }); 

      plusAge.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        addOneAge = Integer.parseInt(age.getText().toString()); 
        addOneAge++; 
        age.setText(Integer.toString(addOneAge)); 
       } 
      }); 


      information.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        Toast toast = Toast.makeText(getActivity().getBaseContext(), "This information will not be published in the world wide web, but will be saved on your own device instead", Toast.LENGTH_SHORT); 
        toast.show(); 
        toast.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL, 0, 0); 
       } 
      }); 

      btnNext.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View v) { 
        //to the next fragment 
       } 
      }); 
     } 

Кроме того, мне интересно, как я могу сделать приложение перейти на следующую страницу, на ButtonClick (btnNext).

Спасибо за ваше время и помощь!

+0

Могу ли я узнать, в чем заключается намерение сделать все ваши переменные статическими? Я имею в виду, почему даже ваши кнопки и изображение являются статическими? – Moulesh

+0

Потому что, если я не ставим перед собой статическую, он говорит: «Нестатическое поле ... нельзя ссылаться на статический контекст». Я довольно новый, поэтому, если есть лучший способ, стреляйте! –

+0

Ну, делая даже ресурс, пригодный для рисования, вырвал бы из памяти вашего телефона, как ад ... и приведет к ошибкам в памяти и приведет к сбою приложения ... Могу ли я узнать, что именно вы пытаетесь сделать. Что ваш подход? у вас есть одна активность, а отдых - это фрагменты? или у вас есть несколько видов деятельности? – Moulesh

ответ

0

У вас есть список фрагментов, хранящихся в какой-либо деятельности, или диспетчер фрагментов? Если это так, вы можете просто получить следующий фрагмент из списка и отключить его с помощью диспетчера фрагментов. Что касается проблемы с тостом getActivity(): если я правильно понимаю, ApplicationFragments - это ваша основная деятельность? Если да, почему бы не позвонить ApplicationFragments.this вместо getActivity()?

+0

не может ссылаться на статический контекст. На самом деле это не моя основная активность, так как у меня есть меню перед этой вкладкой –

+0

ApplicationFragments.this вы имеете в виду? Кроме того, почему бы не изменить почти все поля на частные и нестатические? Это избавит от множества потенциальных проблем. –

+0

Кроме того, не возражаете ли вы связать учебник/руководство, за которым вы следовали? –