при попытке получить доступ к TextView фрагмента, выдается ошибка:
Странно, все работает, когда вставляю 1-й фрагмент. А после замены фрагмента - нет.
Такое впечатление, что после fTrans2.commit(); смена фрагмента происходит не сразу и когда я ищу фрагмент в контейнере, то нахожу предыдущий фрагмент Fragment_main_list.
Помогите разобраться, пожалуйста.
вот ошибка:
Код: Выделить всё
10-14 15:09:59.025: W/dalvikvm(15844): threadid=1: thread exiting with uncaught exception (group=0x4166ece0)
10-14 15:09:59.030: E/AndroidRuntime(15844): FATAL EXCEPTION: main
10-14 15:09:59.030: E/AndroidRuntime(15844): Process: ua.sanya5791.pochemu, PID: 15844
10-14 15:09:59.030: E/AndroidRuntime(15844): java.lang.NullPointerException
10-14 15:09:59.030: E/AndroidRuntime(15844): at ua.sanya5791.pochemu.MainActivity.showSubzones(MainActivity.java:516)
10-14 15:09:59.030: E/AndroidRuntime(15844): at ua.sanya5791.pochemu.MainActivity$3.onItemClick(MainActivity.java:408)
10-14 15:09:59.030: E/AndroidRuntime(15844): at android.widget.AdapterView.performItemClick(AdapterView.java:298)
10-14 15:09:59.030: E/AndroidRuntime(15844): at android.widget.AbsListView.performItemClick(AbsListView.java:1113)
10-14 15:09:59.030: E/AndroidRuntime(15844): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2911)
10-14 15:09:59.030: E/AndroidRuntime(15844): at android.widget.AbsListView$3.run(AbsListView.java:3645)
10-14 15:09:59.030: E/AndroidRuntime(15844): at android.os.Handler.handleCallback(Handler.java:733)
10-14 15:09:59.030: E/AndroidRuntime(15844): at android.os.Handler.dispatchMessage(Handler.java:95)
10-14 15:09:59.030: E/AndroidRuntime(15844): at android.os.Looper.loop(Looper.java:136)
10-14 15:09:59.030: E/AndroidRuntime(15844): at android.app.ActivityThread.main(ActivityThread.java:5146)
10-14 15:09:59.030: E/AndroidRuntime(15844): at java.lang.reflect.Method.invokeNative(Native Method)
10-14 15:09:59.030: E/AndroidRuntime(15844): at java.lang.reflect.Method.invoke(Method.java:515)
10-14 15:09:59.030: E/AndroidRuntime(15844): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
10-14 15:09:59.030: E/AndroidRuntime(15844): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
10-14 15:09:59.030: E/AndroidRuntime(15844): at dalvik.system.NativeStart.main(Native Method)
Код: Выделить всё
public class MainActivity extends FragmentActivity {
Fragment frag2;
Fragment_sub_list fragment_sub_list;
FragmentTransaction fTrans2;
//создаю 1-й фрагмент, вывожу туда ListView и по нажатию на один из элементов ListView вывожу второй фрагмент в методе showSubzones
........
protected void showSubzones(int zone_id) {
........
//make new fragment
fragment_sub_list = new Fragment_sub_list();
//now i can replace current fragment with fragment_sub_list
fTrans2 = getSupportFragmentManager().beginTransaction();
fTrans2.replace(R.id.frgmCont1, fragment_sub_list);
fTrans2.commit();
//find fragment
frag2 = getSupportFragmentManager().findFragmentById(R.id.frgmCont1); //variant for android.support.v4.app.Fragment library
if (frag2 == null){
MyLogger("123123: frag2 is null");
}else{
MyLogger("showSubzones frag2: " + frag2.toString() );
}
//set text of TextView in fragment
TextView tv = ((TextView) frag2.getView().findViewById(R.id.textView121));
if (tv == null){
MyLogger("123123: tv is null" ); //здесь выдается null
}else{
MyLogger("123123 tv: " + tv.toString() );
}
tv.setText("Список подзон:"); [b]//////////// здесь происходит ошибка из лога [/b]java.lang.NullPointerException at ua.sanya5791.pochemu.MainActivity.showSubzones(MainActivity.java:516)
Код: Выделить всё
package ua.sanya5791.pochemu;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class Fragment_sub_list extends Fragment {
public static final boolean isDebug = true;
public final String TAG = "sanya5791.pochemuchka.Fragment_sub_list";
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.fragment_sub_list, null);
if(view.findViewById(R.id.textView121)==null){
MyLogger("TextView is NOT found.");
}else{
MyLogger("TextView is found.");
}
return view;
}
private void MyLogger(String statement){
if (isDebug) {
Log.v(TAG, statement);
}
}
}
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#7700ff00"
android:orientation="vertical" >
<TextView
android:id="@+id/textView121"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Medium Text"
android:textAppearance="?android:attr/textAppearanceMedium" />
<ListView
android:id="@+id/lv_out1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
