2017-11-06 13 views
0

私はポートレートモードで、リストビューを含むフラグメントを持つアクティビティを持ち、そのリストビューをクリックすると、2番目のアクティビティが呼び出されて2番目のフラグメントを使用してデータを表示するアプリケーションを作成していますが、つまり、Frag2はonActivityCreated()メソッドが呼び出されていないと呼ばれます。なぜそうなのか?2番目のフラグメントでonActivityCreated()が呼び出されないのはなぜですか?

MainActivity.xml

ポートレートモード

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 

    tools:context="com.example.ankit.fragprac2.MainActivity"> 

    <fragment 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/frag1" 
     android:name="com.example.ankit.fragprac2.Frag1" 
     /> 



</LinearLayout> 

風景モード

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <fragment 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/frag1" 
     android:name="com.example.ankit.fragprac2.Frag1" 
     android:layout_weight="1"/> 

    <fragment 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/frag2" 
     android:name="com.example.ankit.fragprac2.Frag2" 
     android:layout_weight="1"/> 
</LinearLayout> 

MainActivity.java

public class MainActivity extends AppCompatActivity implements Frag1.Comm { 

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

    public void respond(int i) 
    { 
     FragmentManager fm=getFragmentManager(); 
     Frag2 fg2= (Frag2) fm.findFragmentById(R.id.frag2); 

     if(fg2!=null && fg2.isVisible()) 
     { 
      fg2.setData(i); 
     } 
     else 

     { 
      Intent in=new Intent(this,SecondActivity.class); 
     in.putExtra("position",i); 
      startActivity(in); 


     } 
    } 
} 

Fragment1.xml

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/list"/> 
</RelativeLayout> 

Fragment1.java

public class Frag1 extends Fragment { 

    ListView lv; 

    Comm c1; 




    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.activity_frag1,container,false); 
    } 

    @Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

String[] s=getResources().getStringArray(R.array.topics); 

c1 = (Comm) getActivity(); 
     lv = getActivity().findViewById(R.id.list); 

     lv.setAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,s)); 

     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
       c1.respond(i); 

      } 


     }); 
    } 




    interface Comm 
    { 
     void respond(int i); 
    } 
} 

Fragment2.xml

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/text1" 
     android:layout_centerHorizontal="true" 
     android:textSize="20dp" 
     android:textStyle="bold" 
     android:textColor="#000"/> 
</RelativeLayout> 

Fragment2.java

public class Frag2 extends Fragment { 
    TextView t; 


    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.activity_frag2,container,false); 
    } 


    @Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     Toast.makeText(getActivity(),"OAC",Toast.LENGTH_SHORT).show(); 
     t=getActivity().findViewById(R.id.text1); 
// s1=new String[getResources().getStringArray(R.array.data).length]; 

//  Toast.makeText(getActivity(),""+s1.length,Toast.LENGTH_SHORT).show(); 
     if(savedInstanceState!=null) 
     { 
      String s=savedInstanceState.getString("data",null); 
      t.setText(s); 
     } 
    } 

    public void setData(int i) 
    { String[] s1 =getResources().getStringArray(R.array.data); 
     t.setText(s1[i]); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 

     outState.putString("data",t.getText().toString()); 
    } 
} 

SecondActivity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.ankit.fragprac2.SecondActivity"> 

    <fragment 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/frag21" 
     android:name="com.example.ankit.fragprac2.Frag2"/> 
</RelativeLayout> 

SecondActivity.java SecondActivity.onCreate()

public class SecondActivity extends AppCompatActivity { 

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

     Bundle b= getIntent().getExtras(); 
     if(b!=null) 
     { 
      i= b.getInt("position",0); 
     } 


     FragmentManager fm=getFragmentManager(); 
    Frag2 fga2= (Frag2) fm.findFragmentById(R.id.frag21); 

fga2.setData(i); 


    } 
} 
+0

[onActivityResultがフラグメント内で呼び出されていない可能性があります](https://stackoverflow.com/questions/6147884/onactivityresult-is-not-being-called-in-fragment) –

答えて

0

、このコードを移動:

FragmentManager fm=getFragmentManager(); 
Frag2 fga2= (Frag2) fm.findFragmentById(R.id.frag21); 

fga2.setData(i); 

SecondActivit.onStart()へ。

onCreatefga2.setData(i)を使用すると、アクティビティはまだ作成されません。それが作成されています。従って、フラグメントのonActivityCreated()メソッドはまだ呼び出されていません。

その他の注意事項:代わりにAppCompatActivity

  • Activityべき範囲FragmentActivity
  • getSupportFragmentManager().findFragmentByIdを使用してフラグメントを取得できます。
  • Activity Life CycleおよびFragment LifeCycleも参照してください。

これは役立ちます。

関連する問題