Урок 106. Android 3. Fragments. Взаимодействие с Activity
-
- Сообщения: 42
- Зарегистрирован: 25 янв 2015, 18:57
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Спасибо за урок!
Последний раз редактировалось danek130995 04 фев 2016, 17:05, всего редактировалось 1 раз.
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
В вызове findFragmentById(R.layout.fragm... надо исправить layot на idEternity писал(а):Всем привет.
Такой вопрос:
надо получить данные из Фрагмента в Активити, чтобы с ними работать. У меня 2 вкладки, в каждой из которых фрагмент с EditText и надо получить оттуда значения при нажатии на кнопку (кнопка в Активити)
код Активити:Фрагменты отображаются при нажатии на соответствующую вкладку, заполняя FrameLayout в activity_myКод: Выделить всё
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(); } } }
вкладки работают корректно, ошибка вылазит при нажатии на кнопку..
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Здравствуйте!
Подскажите пожалуйста как из Активити(MainActivity.java) в фрагментЛист(ListWords.java=>где есть фрэймлайаут и листВию) при нажатии кнопки
Спасибо
Подскажите пожалуйста как из Активити(MainActivity.java) в фрагментЛист(ListWords.java=>где есть фрэймлайаут и листВию) при нажатии кнопки
Спасибо
-
- Сообщения: 14
- Зарегистрирован: 19 ноя 2013, 03:48
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Доброго дня. Возник вопрос - а можно ли в приложении использовать 1 активити и штук 10 фрагментов, вместо 10 активити?
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
да, можноThousandDevils писал(а):Доброго дня. Возник вопрос - а можно ли в приложении использовать 1 активити и штук 10 фрагментов, вместо 10 активити?
-
- Сообщения: 2
- Зарегистрирован: 31 май 2017, 11:11
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Здравствуйте!
У меня возникает ошибка
в этом месте (38 строчка)
что нужно написать в методе getView() для frag2? Или как иначе обойти эту ошибку?
У меня возникает ошибка
Код: Выделить всё
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)[]
Код: Выделить всё
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");
}
};
}
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Я сделал(нашел на stackoverflow) так.j-test писал(а):Как реализовать этот урок после того как onAttach(Actitivity) стал Deprecated (достали разрабы...) ?
Код: Выделить всё
@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");
}
}
}
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
EvgenSolovev писал(а): ↑31 май 2017, 11:18Здравствуйте!
У меня возникает ошибкав этом месте (38 строчка)Код: Выделить всё
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)[]
что нужно написать в методе getView() для frag2? Или как иначе обойти эту ошибку?Код: Выделить всё
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"); } }; }
Добрый день, нашли ли Вы решение данной проблемы?
Я уже 7й час не могу ничего придумать(