2015-11-04 32 views
2

我是新來的android和學習片段而不是多個,我有問題。當我從朋友調用行星片段「java.lang.IllegalStateException:活動已被銷燬」android運行時FATAL異常發生在這裏是我的代碼。我看到this頁面,但無法弄清楚如何使用它。我會很感激的任何幫助java.lang.IllegalStateException:活動已被銷燬在另一個片段內的調用片段以取代framelayout

fragment_planet.xml

 <ImageView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/image" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#000000" 
    android:gravity="center" 
    android:padding="32dp" /> 

Friends.java

package com.app.hubara; 

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class Friends extends Fragment { 

    public Friends() { } 

    View rootView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     rootView = inflater.inflate(R.layout.content_friends, container, false); 

     MainActivity main = new MainActivity(); 
     main.friends(); 

     return rootView; 
    } 


} 

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <FrameLayout 
     android:id="@+id/content_frame" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_marginBottom="100dp"/> 

    <Button 
     android:id="@+id/display" 
     android:height="70dp" 
     android:width="300dp" 
     android:layout_marginTop="0dp" 
     android:text="Display" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</RelativeLayout> 

MainActivity

package com.app.hubara; 

import android.app.FragmentTransaction; 
import android.support.v7.app.AppCompatActivity; 

import java.util.Locale; 

import android.app.Fragment; 
import android.app.FragmentManager; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.ImageView; 


public class MainActivity extends AppCompatActivity { 
    FragmentManager fragmentManager; 
    FragmentTransaction fragmentTransaction; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button button = (Button) findViewById(R.id.display); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Friends frag_friends = new Friends(); 
       fragmentManager = getFragmentManager(); 
       fragmentTransaction = fragmentManager.beginTransaction(); 
       fragmentTransaction.replace(R.id.content_frame, frag_friends); 
       fragmentTransaction.commit(); 
      } 
     }); 

    } 

    public void friends(){ 
     PlanetFragment planetFragment = new PlanetFragment(); 
     fragmentManager = getFragmentManager(); 
     fragmentTransaction = fragmentManager.beginTransaction(); 
     fragmentTransaction.replace(R.id.content_frame, planetFragment); 
     fragmentTransaction.commit(); 
    } 


    public static class PlanetFragment extends Fragment { 

     public PlanetFragment() { } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_planet, container, false); 
      int i = getArguments().getInt("Earth"); 
      String planet = getResources().getStringArray(R.array.planets_array)[i]; 
      int imageId = getResources().getIdentifier(planet.toLowerCase(Locale.getDefault()), 
        "drawable", "Earth"); 
      ((ImageView) rootView.findViewById(R.id.image)).setImageResource(imageId); 
      getActivity().setTitle(planet); 
      return rootView; 
     } 

    } 


} 

回答

3

要訪問的活動,你不應該這樣做:

MainActivity main = new MainActivity(); 
main.friends(); 

因爲這會破壞當前活動隨後實例另一個新的活動。

可以適當地調用getActivity()訪問:實際建議您定義和使用的界面片段和活動之間的通信

MainActivity main = getActivity(); 
main.friends(); 

注意。如果您想進一步學習,請參閱the official training

+0

謝謝你,你的解決方案有一點變化,我不得不施加MainActivity,然後像魅力 MainActivity main =(MainActivity)getActivity(); main.friends(); – eureka

相關問題