0

Я пытаюсь получить выбранные значения первого и третьего экранов, которые будут использоваться в последнем четвертом экране. Как я могу получить доступ к радиогруппам предыдущих фрагментов?Соберите выбор RadioButton при создании последнего фрагмента

Я попытался сохранить выбранное значение в методе onPause для каждого фрагмента, но он вызывается при переходе от первого фрагмента к третьему фрагменту, а не от первого до второго.

Я попытался использовать прослушиватель для радиогруппы, но он никогда не вызывается.

Я попытался получить доступ к остальным трем фрагментам из финального фрагмента Циатисты, но без каких-либо успехов.

package com.tsiatistonmyfriend; 

import java.io.IOException; 
import java.sql.SQLException; 
import java.util.Locale; 
import net.justanotherblog.swipeview.R; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.EditText; 
import android.widget.RadioButton; 
import android.widget.RadioGroup; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 

public class MainActivity extends FragmentActivity { 

SectionsPagerAdapter mSectionsPagerAdapter; 
ViewPager mViewPager; 
public static String funnySerious; 

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

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

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

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

OnClickListener listener = new OnClickListener() 
{ 
@Override 
public void onClick(View v) 
{ 
RadioButton rb = (RadioButton) v; 

funnySerious = (String) rb.getText();     
}     
}; 

/** 
* A {@link FragmentPagerAdapter} that returns a fragment corresponding to 
* one of the sections/tabs/pages. 
*/ 
public class SectionsPagerAdapter extends FragmentPagerAdapter { 

public SectionsPagerAdapter(FragmentManager fm) 
{ 
super(fm); 
} 

@Override 
public Fragment getItem(int position) 
{   
Fragment fragment = new FunnySerious(); 

switch (position) 
{ 
case 0: 
return fragment = new FunnySerious(); 
case 1: 
return fragment = new MaleFemale(); 
case 2: 
return fragment = new DirtyClean(); 
case 3: 
return fragment = new Tsiatisto(); 
default: 
break; 
}  

return fragment; 
} 

@Override 
public int getCount() { 
// Show 4 total pages. 
return 4; 
} 

@Override 
public CharSequence getPageTitle(int position) { 
Locale l = Locale.getDefault(); 
switch (position) { 
case 0: 
return getString(R.string.title_section1).toUpperCase(l); 
case 1: 
return getString(R.string.title_section2).toUpperCase(l); 
case 2: 
return getString(R.string.title_section3).toUpperCase(l); 
case 3: 
return getString(R.string.title_section4).toUpperCase(l); 
} 
return null; 
} 
} 


public static class FunnySerious extends Fragment 
{  
View v; 

public FunnySerious() {} 

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

v = rootView; 

return rootView; 
}   
} 

public static class MaleFemale extends Fragment 
{  
public MaleFemale() {} 

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

return rootView; 
}  
} 

public static class DirtyClean extends Fragment 
{  
public DirtyClean() {} 

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

return rootView; 
}  
} 

public static class Tsiatisto extends Fragment 
{  
public Tsiatisto() {} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
//FunnySerious textFragment = (FunnySerious) this.getActivity().getSupportFragmentManager().findFragmentById(R.id.pager); 


View rootView = inflater.inflate(R.layout.tsiatisto, container, false); 

DataBaseHelper myDbHelper = new DataBaseHelper(this.getActivity().getApplicationContext());   

try 
{ 
myDbHelper.createDataBase(); 
myDbHelper.openDataBase(); 
}catch(IOException ioe) 
{ 
throw new Error("Unable to create database"); 
}   

final SQLiteDatabase db = myDbHelper.getDB();  

Cursor cursor; 
cursor = db.query("Tsiatista ORDER BY RANDOM() LIMIT 1", new String[] { "*" }, null, null, null, null, null); 
//cursor = db.rawQuery("SELECT Verse FROM Tsiatista WHERE ID = 1", null); 

if(cursor.moveToFirst()) 
{     
String htr; 
htr = (String) cursor.getString(cursor.getColumnIndex("Verse")); 

EditText et = (EditText) rootView.findViewById(R.id.tsiatistoTxt); 
et.setText(htr); 

cursor.close(); 
} 

return rootView; 
}  
} 
} 
+0

Я получил доступ к радиобарабанам, добавив в аррайалисты виды, а затем получив их доступ к ним успешно. Вот использованный код: \t Просмотреть fs; \t RadioGroup rg; \t int selectedId; \t RadioButton rb; \t fs = (Вид) mViews.get (0); \t rg = (RadioGroup) fs.findViewById (R.id.radioGroupFS); \t selectedId = rg.getCheckedRadioButtonId(); \t rb = (RadioButton) fs.findViewById (selectedId); \t funnySerious = (String) rb.getText(); Однако проблема в том, что я не знаю, где разместить это, чтобы выполнить выполнение, когда последний фрагмент становится видимым. В любом месте, где я его размещаю, он выполняется преждевременно. – user3170

ответ

0

Два способа,

  1. Пасс выбранные значения как ключ Логическое значение пары в виде пучка, используя метод setArgument при переключении между фрагментом. Затем вы можете получить доступ к этому переданному пакету и использовать выбранные значения из предыдущего фрагмента, чтобы далее логичить логику, затем вы можете соединить эти значения со значениями из текущего фрагмента и продолжить его перемещение.

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

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

+0

Откуда я знаю, что переключаюсь между фрагментами. Я имею в виду, какая часть кода это? – user3170

+0

OnCreate фрагмента будет вызываться всякий раз, когда он загружен, в вашем коде вы используете ViewPager с адаптером, тем лучше вы загружаете весь проверенный элемент из пользователя в виде глобальной переменной или предпочтений. иначе в методе geItem вы возвращаете фрагмент, просто setArgument с пакетом там, и получите доступ к нему. – Techfist

+0

Я позволил получить доступ к радиобарабанам, добавив их в арраист, а затем получив их доступ к ним успешно. Вот код: View fs; RadioGroup rg; int selectedId; RadioButton rb; fs = (Вид) mViews.get (0); rg = (RadioGroup) fs.findViewById (R.id.radioGroupFS); selectedId = rg.getCheckedRadioButtonId(); rb = (RadioButton) fs.findViewById (selectedId); funnySerious = (String) rb.getText(); Однако проблема в том, что я не знаю, где разместить это, чтобы выполнить выполнение, когда последний фрагмент становится видимым. В любом месте, где я его размещаю, он выполняется преждевременно – user3170

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