1

Ситуация: Я создаю приложение, которое имеет 3 фрагмента, которые пользователь может провести между использованием viewpager. На каждом фрагменте у них есть кнопка переключения, которая отображает/скрывает ответ.Сброс togglebutton на viewpager swipe

Вопрос: Когда вы нажимаете кнопку переключения на первом фрагменте, она включается. Затем, когда вы переходите ко второму фрагменту и переходите к первому, кнопка переключения по-прежнему проверяется на ON (она все еще показывает ответ). Как я могу это сделать, когда вы прокручиваете вперед, а затем назад, чтобы сбросить состояние кнопок.

Я думал, что это будет что-то простое, как положить это в фрагменте

public void onResume(){ 
    super.onResume(); 

    showHideButton.setChecked(false); 
} 

Это не работало. Я также посмотрел на кучу других симуляторов сообщений, но ничего не работало. Я прошу прощения, я не смогу проверить здесь, чтобы ответить на вопросы до сегодняшнего вечера, потому что я на работе, и я просто сделал короткий перерыв, чтобы задать этот вопрос.

EDIT:

активность:

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.view.ViewPager; 
import android.support.v4.view.ViewPager.OnPageChangeListener; 
import android.view.Menu; 
public class Activity10_1 extends FragmentActivity { 

Fragment10_1 frag = new Fragment10_1(); 

ViewPager pager; 

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

    //Set up pager and fragment manager. 
    pager = (ViewPager) findViewById(R.id.pager); 
    FragmentManager fm = getSupportFragmentManager(); 
    MyFragmentPageAdapter pagerAdapter = new MyFragmentPageAdapter(fm); 
    pager.setAdapter(pagerAdapter); 
    pageChange(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity10_1, menu); 
    return true; 
} 
public void pageChange(){ 
    pager.setOnPageChangeListener(new OnPageChangeListener(){ 

       @Override 
       public void onPageScrollStateChanged(int position) {} 
       @Override 
       public void onPageScrolled(int arg0, float arg1, int arg2) {} 
       @Override 
       public void onPageSelected(int position) { 

        switch(position){ 
        case 0: 
         frag.getShowHideButton().setChecked(false); 
         break; 
        case 1: 
         frag.getShowHideButton().setChecked(false); 
         break; 
        case 2: 
         frag.getShowHideButton().setChecked(false); 
         break; 
        default: 
         frag.getShowHideButton().setChecked(false); 
        } 
       } 

      }); 

} 

} 

Пейджер адаптер:

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 

public class MyFragmentPageAdapter extends FragmentPagerAdapter { 

DataHolder10_1 dh = new DataHolder10_1(); 

final int PAGE_COUNT = 3; 

public MyFragmentPageAdapter(FragmentManager fm) { 
    super(fm); 
    // TODO Auto-generated constructor stub 
} 

// method will be involked when a page is requested to create 
@Override 
public Fragment getItem(int arg0){ 
    //Create bundle. 
    Bundle data = new Bundle(); 

    //Instantiate fragment. 
    Fragment10_1 myFragment = new Fragment10_1(); 



    //Add data to bundle. 
    data.putInt("pageNumberData", arg0 + 1); 
    data.putString("questionData", dh.getQuestions()[arg0]); 
    data.putString("answerData", dh.getAnswers()[arg0]); 

    //Send bundle to fragment. 
    myFragment.setArguments(data); 

    return myFragment; 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 

    return PAGE_COUNT; 
} 

} 

Фрагмент:

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.CompoundButton; 
import android.widget.TextView; 
import android.widget.ToggleButton; 

public class Fragment10_1 extends Fragment { 

private int pageNumber; 
private String question; 
private String answer; 

//declare TextViews. 
private TextView pageNumberTextView; 
private TextView questionTextView; 
private TextView answerTextView; 

private String origMessage;// saves message of answer for switching between show and hide. 

//colors for switching between show and hide. 
private int showColor; 
private int hideColor; 

//declare toggle button. 
private ToggleButton showHideButton; 

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 

    //Get bundle data. 
    Bundle data = getArguments(); 

    // Get integer data of the key current page from the bundle 
    pageNumber = data.getInt("pageNumberData", 0); 
    question = data.getString("questionData"); 
    answer = data.getString("answerData"); 



} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState){ 


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

    pageNumberTextView = (TextView)view.findViewById(R.id.pageCount1); 
    questionTextView = (TextView)view.findViewById(R.id.question1); 
    answerTextView = (TextView)view.findViewById(R.id.answer1); 
    showHideButton = (ToggleButton)view.findViewById(R.id.toggleButton1); 



    showHideButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     public void onCheckedChanged(CompoundButton buttonView, boolean on){ 

      if(on){ 
       //change color and text if button is set to show answer. 
       answerTextView.setTextColor(showColor); 
       answerTextView.setText(answer); 
      }else{ 
       //default answer to hidden properties. 
       answerTextView.setTextColor(hideColor); 
       answerTextView.setText(origMessage); 
      } 
     } 
    }); 

    //grab colors from text views for switching between show and hide. 
    showColor = questionTextView.getTextColors().getDefaultColor(); 
    hideColor = answerTextView.getTextColors().getDefaultColor(); 

    //set original message. 
    origMessage = getString(R.string.answer); 



    //create Text views and button down here. 
    pageNumberTextView.setText("Page: " + pageNumber + "/3"); 
    questionTextView.setText(question); 

    return view; 
} 
public ToggleButton getShowHideButton(){ 

    return showHideButton; 
} 
} 

Сейчас им пытаются использовать OnPageChangeListener. Приложение подходит отлично, но это вызывает его сбой при прохождении.

Edit 2: arn't виджет создается здесь

private TextView pageNumberTextView; 
private TextView questionTextView; 
private TextView answerTextView; 
private ToggleButton showHideButton; 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState){ 


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

    pageNumberTextView = (TextView)view.findViewById(R.id.pageCount1); 
    questionTextView = (TextView)view.findViewById(R.id.question1); 
    answerTextView = (TextView)view.findViewById(R.id.answer1); 
    showHideButton = (ToggleButton)view.findViewById(R.id.toggleButton1); 
+0

Вы делаете какой-либо прогресс? –

+0

К сожалению, у меня нет:/Я поднял пример, но они внедрили это в действие. Моя кнопка находится на фрагментах, поэтому я не уверен, как я собираюсь сбросить ее из активности. Теперь, если честно, у меня не было много времени, чтобы действительно изучить его. Любая помощь приветствуется, я сообщу, если я это выясню. – Snakeyesz

+0

Итак, вы говорите, что onPageChangeListener не будет работать для вас? –

ответ

0

Используйте ViewPage.OnPageChangeListener. Установите слушателя и реализуйте onPageSelected().

В onPageSelected() вам нужно получить текущую активную страницу. Существуют разные способы сделать это. Один из способов - сохранить собственный массив фрагментов. Я дам краткий пример:

Добавить это MyFragmentPagerAdapter:

public Fragment findFragmentByPosition(int position) { 
    FragmentPagerAdapter fragmentPagerAdapter = getFragmentPagerAdapter(); 
    return getSupportFragmentManager().findFragmentByTag(
      "android:switcher:" + getViewPager().getId() + ":" 
        + fragmentPagerAdapter.getItemId(position)); 
} 

В onPageSelected (INT позиция), сделайте это (и удалить существующий код):

Fragment10_1 curFrag = pagerAdapter.findFragmentByPosition (position); 
curFrag.getShowHideButton().setChecked(false); 
+0

Это дает мне кучу ошибок. Он говорит мне, что должен создавать методы для getFragmentPagerAdapter, getSupportFragmentManager, getViewPager в классе MyFragmentPageAdapter. Нужен ли мне какой-то статус импорта? – Snakeyesz

+0

Вы могли бы. Если вы используете Eclipse, он будет генерировать импорт для вас. Если вам не нравится это решение, вы можете попробовать другое: вместо создания фрагментов в getItem() создайте их в конструкторе и просто верните их в getItem(). Затем вы можете использовать getItem() для извлечения существующих фрагментов в onPageSelected(). –

+0

Как мне что-то вернуть из конструктора, у конструкторов нет возврата? я не должен был бы сделать что-то вроде «public Fragment MyFragmentPageAdapter ...», что означало бы, что это уже не конструктор. – Snakeyesz

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