2017-11-06 1 views
0

세로보기 모드에서 목록보기가 포함 된 조각이 있고 해당 목록보기를 클릭하면 두 번째 조각을 사용하여 데이터를 표시하는 두 번째 활동이 호출되지만 두 번째 조각 , 즉 Frag2가 호출되면 onActivityCreated() 메서드가 호출되지 않습니다. 왜 그렇게?두 번째 조각에서 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

,

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 CycleFragment LifeCycle도 참조하십시오.

희망 사항.

관련 문제