2016-02-01 2 views
0

Я новичок в разработке Android и Java, и я стараюсь сделать n баз приложений на обучающих программах, найденных в Интернете. Не мог найти ничего для того, что мне нужно, что работает для меня. У меня есть простой счетчик с 5 вариантами, и мне бы хотелось, чтобы при нажатии на эту кнопку открывается новое действие. Это то, что у меня есть до сих пор, и что происходит, когда я перехожу на вкладку «Игры», чтобы выбрать то, что я хочу от счетчика, оно напрямую переходит к первому случаю (GamesAnimals). Я представляю, что это должно быть что-то простое, но я не мог найти его до сих пор.Опция Spinner, открывающая новый вопрос о задаче

Заранее благодарим за поддержку.

Вот код:

package com.gadgetcatch.firstwords; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 


public class Games extends Fragment { 

Intent i; 

Spinner gamesCategory; 

String [] shapes = { 
     "", 
     "ANIMALS", 
     "BODY", 
     "CLOTHES", 
     "FOOD", 
     "TRANSPORT", 
}; 
private static final String ARG_SECTION_NUMBER = "section_number"; 

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

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v =inflater.inflate(R.layout.games,container,false); 

    gamesCategory = (Spinner)v.findViewById(R.id.spinner); 
    ArrayAdapter <String> nameArrayAd = new ArrayAdapter <>(getActivity(), android.R.layout.simple_spinner_dropdown_item, shapes); 

    gamesCategory.setAdapter(nameArrayAd); 
    gamesCategory.setOnItemSelectedListener(
      new AdapterView.OnItemSelectedListener() { 
       @Override 
       public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

        int position = gamesCategory.getSelectedItemPosition(); 

        if (position > 0) ; 
        switch (position) { 

         case 0: 
          i = new Intent(getActivity(), GamesAnimals.class); 
          break; 
         case 1: 
          i = new Intent(getActivity(), GamesBody.class); 
          break; 
         case 2: 
          i = new Intent(getActivity(), GamesClothes.class); 
          break; 
         case 3: 
          i = new Intent(getActivity(), GamesFood.class); 
          break; 
         case 4: 
          i = new Intent(getActivity(), GamesTransport.class); 
          break; 

        } 

        startActivity(i); 

       } 

       @Override 
       public void onNothingSelected(AdapterView<?> arg0) { 

       } 
      } 
    ); 


    return v; 
} 

}

+0

Можете ли вы быть более явным, как (позиция> 0 0) ничего не говорит мне ... –

ответ

1

На самом деле, когда вы установите выбор на spinner Adaper, по умолчанию spinner позиции 0 срабатывает, и именно поэтому ваш GameAnimals actiivty в настоящее время запущен. Что вы можете сделать, так это отличать режим инициализации и режим выбора. Когда UI строится, установите логическое значение initialization на true, а затем установите значение false в onItemselection. Эта работа решит вашу проблему.

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

UPDATE

Объявите новую переменную, которая гласит режим инициализации

Spinner gamesCategory; 
boolean initializationMode = true; 

Затем использовать эту переменную в onSpinnerSelection в onCreateView Spinner gamesCategory; boolean initializationMode = true;

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v =inflater.inflate(R.layout.games,container,false); 

    gamesCategory = (Spinner)v.findViewById(R.id.spinner); 
    ArrayAdapter <String> nameArrayAd = new ArrayAdapter <>(getActivity(), android.R.layout.simple_spinner_dropdown_item, shapes); 

    gamesCategory.setAdapter(nameArrayAd); 
    initializationMode = true; 
    gamesCategory.setOnItemSelectedListener(
      new AdapterView.OnItemSelectedListener() { 
       @Override 
       public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
        if(!initializationMode) { 
        int position = gamesCategory.getSelectedItemPosition(); 

        if (position > 0) ; 
        switch (position) { 

         case 0: 
          i = new Intent(getActivity(), GamesAnimals.class); 
          break; 
         case 1: 
          i = new Intent(getActivity(), GamesBody.class); 
          break; 
         case 2: 
          i = new Intent(getActivity(), GamesClothes.class); 
          break; 
         case 3: 
          i = new Intent(getActivity(), GamesFood.class); 
          break; 
         case 4: 
          i = new Intent(getActivity(), GamesTransport.class); 
          break; 

        } 

        startActivity(i); 
        } else { 
      initializationMode = false; 
        } 

       } 

       @Override 
       public void onNothingSelected(AdapterView<?> arg0) { 

       } 
      } 
    ); 


    return v; 
} 
+0

Может быть, это поможет, но я не понимаю, именно то, что мне нужно изменить. Как я уже говорил, я понимаю все это только частично ... Если бы вы могли дать мне этот пример с кодом, возможно, я пойму лучше. Большое спасибо. –

+0

См. Обновленный ответ –

+0

Hello Mustansar! Обновлен код с вашими предложениями, и он работает с одним исключением. Когда я нажимаю животных в круговом меню, класс тела открывается и так далее. Есть разница 1 между тем, что я нажимаю, и тем, что отображается на экране. Я изменил случаи, начал с 1 до 5 и решил эту проблему. Большое спасибо! –

Смежные вопросы