Урок 106. Android 3. Fragments. Взаимодействие с Activity

Обсуждение уроков
danek130995
Сообщения: 42
Зарегистрирован: 25 янв 2015, 18:57

Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit

Сообщение danek130995 » 08 янв 2016, 16:03

Спасибо за урок!
Последний раз редактировалось danek130995 04 фев 2016, 17:05, всего редактировалось 1 раз.

Syrzhn
Сообщения: 1
Зарегистрирован: 23 авг 2015, 09:33

Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit

Сообщение Syrzhn » 29 янв 2016, 14:01

Eternity писал(а):Всем привет.
Такой вопрос:
надо получить данные из Фрагмента в Активити, чтобы с ними работать. У меня 2 вкладки, в каждой из которых фрагмент с EditText и надо получить оттуда значения при нажатии на кнопку (кнопка в Активити)
код Активити:

Код: Выделить всё

public class MyActivity extends ActionBarActivity {

    private FragmentTabHost mTabHost;
    FragmentTab frag1;
    Fragment2 frag2;
    FragmentTransaction fTrans;

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

        setContentView(R.layout.activity_my);
        mTabHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
        mTabHost.setup(this, getSupportFragmentManager(), android.R.id.tabcontent);

        mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("Откуда", null),
                FragmentTab.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Куда", null),
                Fragment2.class, null);

        frag1 = new FragmentTab();
        frag2 = new Fragment2();

    }

    public void onClick (View view) {
        if (view.getId() == R.id.btnSearch) {
            Fragment frag1 = getSupportFragmentManager().findFragmentById(R.layout.fragment);
            String str1 = ((EditText)frag1.getView().findViewById(R.id.et1)).getText().toString();

            Fragment frag2 = getSupportFragmentManager().findFragmentById(R.layout.fragment2);
            String str2 = ((EditText)frag2.getView().findViewById(R.id.et2)).getText().toString();

            Toast.makeText(this, str1 + "  "+ str2, Toast.LENGTH_SHORT).show();
        }
    }

}
Фрагменты отображаются при нажатии на соответствующую вкладку, заполняя FrameLayout в activity_my
вкладки работают корректно, ошибка вылазит при нажатии на кнопку.. :cry: :?
В вызове findFragmentById(R.layout.fragm... надо исправить layot на id

newbie91
Сообщения: 1
Зарегистрирован: 26 фев 2016, 17:18

Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit

Сообщение newbie91 » 26 фев 2016, 17:22

Здравствуйте!
Подскажите пожалуйста как из Активити(MainActivity.java) в фрагментЛист(ListWords.java=>где есть фрэймлайаут и листВию) при нажатии кнопки
Спасибо

ThousandDevils
Сообщения: 14
Зарегистрирован: 19 ноя 2013, 03:48

Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit

Сообщение ThousandDevils » 22 авг 2016, 16:37

Доброго дня. Возник вопрос - а можно ли в приложении использовать 1 активити и штук 10 фрагментов, вместо 10 активити?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit

Сообщение klblk » 23 авг 2016, 05:20

ThousandDevils писал(а):Доброго дня. Возник вопрос - а можно ли в приложении использовать 1 активити и штук 10 фрагментов, вместо 10 активити?
да, можно

EvgenSolovev
Сообщения: 2
Зарегистрирован: 31 май 2017, 11:11

Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit

Сообщение EvgenSolovev » 31 май 2017, 11:18

Здравствуйте!

У меня возникает ошибка

Код: Выделить всё

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.support.v4.app.Fragment.getView()' on a null object reference
                                                                                        at com.solovev.p1061_fragmentactivity.MainActivity$1.onClick(MainActivity.java:40)
                                                                                        at android.view.View.performClick(View.java:4780)
                                                                                        at android.view.View$PerformClick.run(View.java:19866)
                                                                                        at android.os.Handler.handleCallback(Handler.java:739)
                                                                                        at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                        at android.os.Looper.loop(Looper.java:135)
                                                                                        at android.app.ActivityThread.main(ActivityThread.java:5254)
                                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                                        at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)[]
в этом месте (38 строчка)

Код: Выделить всё

import android.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements Fragment2.onSomeEventListener {

    Button btnFind;

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

        Fragment frag2 = new Fragment2();
        android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.add(R.id.fragment2, frag2);
        ft.commit();

        btnFind = (Button)findViewById(R.id.btnFind);
        btnFind.setOnClickListener(ocl);
    }

    @Override
    public void someEvent(String s) {
        android.support.v4.app.Fragment frag1 = getSupportFragmentManager().findFragmentById(R.id.fragment1);
        ((TextView)frag1.getView().findViewById(R.id.textView)).setText("Text from Fragment 2:" + s);
    }
    View.OnClickListener ocl = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            android.support.v4.app.Fragment frag1 = getSupportFragmentManager().findFragmentById(R.id.fragment1);
            ((TextView) frag1.getView().findViewById(R.id.textView)).setText("Access to Fragment 1 from Activity");

            android.support.v4.app.Fragment frag2 = getSupportFragmentManager().findFragmentById(R.id.fragment2);
            ((TextView) frag2.getView().findViewById(R.id.textView2)).setText("Access to Fragment 2 from Activity");
        }
    };

}
что нужно написать в методе getView() для frag2? Или как иначе обойти эту ошибку?

Аватара пользователя
igor5451
Сообщения: 1
Зарегистрирован: 07 июн 2017, 16:12
Откуда: Минск
Контактная информация:

Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit

Сообщение igor5451 » 19 июл 2017, 16:53

j-test писал(а):Как реализовать этот урок после того как onAttach(Actitivity) стал Deprecated (достали разрабы...) ?
Я сделал(нашел на stackoverflow) так.

Код: Выделить всё

  @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        Activity a;

        if (context instanceof Activity){
            a=(Activity) context;
            try {
                someEventListener = (onSomeEventListener) a;
            } catch (ClassCastException e) {
                throw new ClassCastException(a.toString() + " must implement onSomeEventListener");
            }
        }

    }

ObolRom
Сообщения: 1
Зарегистрирован: 31 окт 2020, 22:29

Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit

Сообщение ObolRom » 31 окт 2020, 22:38

EvgenSolovev писал(а):
31 май 2017, 11:18
Здравствуйте!

У меня возникает ошибка

Код: Выделить всё

java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.support.v4.app.Fragment.getView()' on a null object reference
                                                                                        at com.solovev.p1061_fragmentactivity.MainActivity$1.onClick(MainActivity.java:40)
                                                                                        at android.view.View.performClick(View.java:4780)
                                                                                        at android.view.View$PerformClick.run(View.java:19866)
                                                                                        at android.os.Handler.handleCallback(Handler.java:739)
                                                                                        at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                        at android.os.Looper.loop(Looper.java:135)
                                                                                        at android.app.ActivityThread.main(ActivityThread.java:5254)
                                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                                        at java.lang.reflect.Method.invoke(Method.java:372)
                                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)[]
в этом месте (38 строчка)

Код: Выделить всё

import android.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements Fragment2.onSomeEventListener {

    Button btnFind;

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

        Fragment frag2 = new Fragment2();
        android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.add(R.id.fragment2, frag2);
        ft.commit();

        btnFind = (Button)findViewById(R.id.btnFind);
        btnFind.setOnClickListener(ocl);
    }

    @Override
    public void someEvent(String s) {
        android.support.v4.app.Fragment frag1 = getSupportFragmentManager().findFragmentById(R.id.fragment1);
        ((TextView)frag1.getView().findViewById(R.id.textView)).setText("Text from Fragment 2:" + s);
    }
    View.OnClickListener ocl = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            android.support.v4.app.Fragment frag1 = getSupportFragmentManager().findFragmentById(R.id.fragment1);
            ((TextView) frag1.getView().findViewById(R.id.textView)).setText("Access to Fragment 1 from Activity");

            android.support.v4.app.Fragment frag2 = getSupportFragmentManager().findFragmentById(R.id.fragment2);
            ((TextView) frag2.getView().findViewById(R.id.textView2)).setText("Access to Fragment 2 from Activity");
        }
    };

}
что нужно написать в методе getView() для frag2? Или как иначе обойти эту ошибку?

Добрый день, нашли ли Вы решение данной проблемы?
Я уже 7й час не могу ничего придумать(

Ответить