Подтвердить что ты не робот

Как получить доступ к переменным активности из фрагмента Android

В Управлении я:

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.

4b9b3361

Ответ 1

Попробуйте следующее:

public View onCreateView(...){
  tabsmain xxx = (tabsmain)getActivity();
  lc.setChecked(xxx.lf_ch);
}

Ответ 2

Я знаю, что это старый вопрос, но вот простой ответ, который работает без прыжков через любые обручи. В 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

Ответ 3

принять значение Activity во фрагменте.

((MainActivity) getActivity()). MGoogleApiClient;

Ответ 4

Другим способом получения данных из активности является доступ к действию с помощью:

getActivity.getIntent().getExtras();

и т.д.

Это может быть полезно, если вы начнете работу с фрагментом в xml и хотите каким-то образом управлять положением ifCreate().

PS: из-за чего вы должны в первую очередь поставить что-то намеренное

Ответ 5

try tabsmain.appContext.lf_ch даст значение u этой переменной.

Также в этом наборе действий appContext = this

Ответ 6

попробуйте это

public boolean lf_ch=false;
public class tabsmain extends Activity{

    public static Context appContext;
    public void onCreate(Bundle savedInstanceState){

Ответ 7

Вы можете попробовать следующий метод:

lc.setChecked(((yourpackagename)getActivity()).lf_ch);

Ответ 8

Попробуйте что-то вроде этого:

    ViewPager mViewPager = (ViewPager) getActivity().findViewById(R.id.m_view_pager);

Ответ 9

Сделать универсальный получатель результатов

enter image description here

Вы можете создать интерфейс для этой задачи, который будет извлекать данные 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();

Ответ 10

Получите доступ к переменным Activity во фрагменте, чтобы использовать статическое ключевое слово следующим образом:

MainActvity.java

public static boolean lf_ch=false;

tabquestsFragment.java

boolean if_value=MainActvity.lf_ch;

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

Ответ 11

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

tabsmain tabsm=(tabsmain) getActivity();

строка в onActivityCreated()

Ответ 12

Изменить: public boolean lf_ch=false; до: public static boolean lf_ch=false; Вы можете получить доступ/изменить значение с помощью: tabsmain.lf_ch