Ответ 1
Попробуйте следующее:
public View onCreateView(...){
tabsmain xxx = (tabsmain)getActivity();
lc.setChecked(xxx.lf_ch);
}
В Управлении я:
public class tabsmain extends Activity{
public static Context appContext;
public boolean lf_ch=false;
public void onCreate(Bundle savedInstanceState){
Я хотел бы получить доступ и, возможно, изменить lf_ch из фрагмента внутри tabsmain;
public class tabquests extends Fragment{
public CheckBox lc;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)//onCreateView
{
lc.setChecked(//set it to lf_ch);
Однако я не могу получить доступ к значению lf_ch.
Попробуйте следующее:
public View onCreateView(...){
tabsmain xxx = (tabsmain)getActivity();
lc.setChecked(xxx.lf_ch);
}
Я знаю, что это старый вопрос, но вот простой ответ, который работает без прыжков через любые обручи. В Fragment определите переменную, которая является активностью, в которой будет находиться фрагмент, а затем в onCreateView подключит переменную к активности, а затем вы получите ссылку, которая может получить любую общедоступную переменную в основном действии. Я забыл об этом, когда оказался здесь. Это немного сложно сделать другим способом, так как вам нужно найти точный фрагмент, который отображается. Однако с этим вам не нужно делать это иначе, потому что вы можете легко передавать вещи туда и обратно. Надеюсь, это поможет любому, кто встретит это.
public Quiz_Avtivity mainQuiz;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_quiz, container, false);
mainQuiz = (Quiz_Avtivity) getActivity();
//Below is where you get a variable from the main activity
mainQuiz.AnyPublicVariable = whatEver;
//also
whatEver = mainQuiz.AnyPublicVariable
принять значение Activity во фрагменте.
((MainActivity) getActivity()). MGoogleApiClient;
Другим способом получения данных из активности является доступ к действию с помощью:
getActivity.getIntent().getExtras();
и т.д.
Это может быть полезно, если вы начнете работу с фрагментом в xml и хотите каким-то образом управлять положением ifCreate().
PS: из-за чего вы должны в первую очередь поставить что-то намеренное
try tabsmain.appContext.lf_ch
даст значение u этой переменной.
Также в этом наборе действий appContext = this
попробуйте это
public boolean lf_ch=false;
public class tabsmain extends Activity{
public static Context appContext;
public void onCreate(Bundle savedInstanceState){
Вы можете попробовать следующий метод:
lc.setChecked(((yourpackagename)getActivity()).lf_ch);
Попробуйте что-то вроде этого:
ViewPager mViewPager = (ViewPager) getActivity().findViewById(R.id.m_view_pager);
Вы можете создать интерфейс для этой задачи, который будет извлекать данные String из любого действия в ваш фрагмент. Следуй этим шагам.
Создать интерфейс
public interface MyResultReceiver{
public String getResult();
}
Сделайте MyResultReceiver
членом вашего Фрагмента
public class tabquests extends Fragment{
public CheckBox lc;
public MyResultReceiver resultreceiver;
@Override
public void onAttach(Context context){
super.onAttach(cotext);
resultreceiver = (MyResultReceiver)context;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)//onCreateView
{
YourFragment code code
Boolean result = resultreceiver.getResult();
lc.setChecked(result);
}
}
MyResultReceiver
в Activity и переопределите метод
public class tabsmain extends Activity{
public boolean lf_ch=false;
// Activity code
@Override
public boolean getResult(){
return lf_ch;
}
}
Вы можете найти это немного длинным для этого случая. Но плюсом этого подхода является то, что если вы хотите повторно использовать этот код для другого действия. Вам не придется снова писать ту же логику. Просто MyResultReceiver
в свою деятельность, переопределите метод, и все будет хорошо.
СОВЕТ: Чтобы иметь возможность получать любые данные, измените определение метода в интерфейсе
из public String getResult();
для public Object getResult();
Получите доступ к переменным Activity во фрагменте, чтобы использовать статическое ключевое слово следующим образом:
MainActvity.java
public static boolean lf_ch=false;
tabquestsFragment.java
boolean if_value=MainActvity.lf_ch;
Я надеюсь, что это поможет вам
обратите внимание, что ваш фрагмент загружается до активности. Итак, вы должны позвонить
tabsmain tabsm=(tabsmain) getActivity();
строка в onActivityCreated()
Изменить:
public boolean lf_ch=false;
до: public static boolean lf_ch=false;
Вы можете получить доступ/изменить значение с помощью: tabsmain.lf_ch