2014-07-14 5 views
0

enter image description here 이 후 발생하는 것입니다 다시 시작한 후 마스크 : 내 응용 프로그램을 열안드로이드 텍스트 뷰는/두 배로 미러/응용 프로그램

1) 정기적 인 작업을 수행합니다. 2) 내 응용 프로그램을 닫습니다 (조각 및 활동 삭제). 3) 응용 프로그램 서랍에서 내 응용 프로그램을 다시 엽니 다.

나는 라이프 사이클 이벤트에서 내가하고있는 일이라고 느낍니다. 그 중 누구와 마주 친 적이 있습니까? 뭐가 문제 야? 활동의

코드 (뷰 초기화) 조각 활동의

public class Play_Main extends Fragment implements IListener { 

    private static final String TAG = "Play_Main_Fragment"; 
    public static CountDownLatch mCountDown = new CountDownLatch(1); 

    private Typeface roboto; 

    // Views 
    private TextView tv1; 
    private TextView pullToConnect; 
    private Button connectButton; 
    private SwipeRefreshLayout mSwipeLayout; 


    // Object Instances 
    private Play_Main mainFrag; 
    private MessageManager messageManager; 

    // Animation 
    private Animation fadeIn; 
    private Animation fadeOut; 

    // Fields 
    private String isConnectedText; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.main_ui_frame, container, false); 
     super.onCreateView(inflater, container, null); 

     mainFrag = this; 
     final Gson jsonMaker = new Gson(); 

     roboto = Typeface.createFromAsset(getActivity().getAssets(), "fonts/robotot.ttf"); 

     fadeOut = AnimationUtils.loadAnimation(getActivity(), R.anim.fade_out); 
     fadeIn = AnimationUtils.loadAnimation(getActivity(), R.anim.fade_in); 

     messageManager = MessageManager.Instance(); 
     // Register as a general listener 
     messageManager.RegisterListener(mainFrag); 
     // Register as the UI to interact with 
     messageManager.registerUI(mainFrag); 

     pullToConnect = (TextView) view.findViewById(R.id.pullToConnect); 
     pullToConnect.setTypeface(roboto); 

     tv1 = (TextView) view.findViewById(R.id.tv1); 
     tv1.setTypeface(roboto); 
     tv1.setText("Connect and start playing"); 


     mSwipeLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipe_container); 
     mSwipeLayout.setColorScheme(android.R.color.holo_blue_bright, 
       android.R.color.holo_green_light, 
       android.R.color.holo_orange_light, 
       android.R.color.holo_red_light); 

XML의

public class PlayClient extends Activity { 
public static Context ctx = null; 

private String TAG = "PlayClient Activity"; 

private Fragment main; 
private Fragment mSoundCloudFrag; 
private MediaControlsComponent mdc; 

private FragmentManager fm; 

private String[] mNavigationItems; 
private ListView mDrawerList; 
private DrawerLayout mDrawer; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_layout); 
    ctx = this; 

    // Sound Cloud fragment 
    mSoundCloudFrag = new SoundCloudFragment(); 

    // Add just the main player fragment 
    main = new Play_Main(); 
    mdc = new MediaControlsComponent(); 


    fm = getFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 

    ft.add(R.id.frameContainer, main, "main"); 
    ft.setCustomAnimations(R.animator.fade_in, android.R.animator.fade_out); 
    ft.add(R.id.mediaControllerFrame, mdc); 
    ft.commit(); 
    getFragmentManager().executePendingTransactions(); 


    // Navigation Drawer 
    mNavigationItems = getResources().getStringArray(R.array.nav_drawer); 
    mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerList = (ListView) findViewById(R.id.left_drawer); 

코드 : 조각의

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="100" 
     android:background="@color/darker" 
     android:orientation="vertical"> 


     <FrameLayout 
      android:id="@+id/frameContainer" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentTop="true" 
      android:layout_weight="80"></FrameLayout> 

     <FrameLayout 
      android:id="@+id/mediaControllerFrame" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:layout_alignParentLeft="true" 
      android:layout_weight="20"></FrameLayout> 

    </LinearLayout> 


    <ListView 
     android:id="@+id/left_drawer" 
     android:layout_width="200dp" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:background="#111" 
     android:choiceMode="singleChoice" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="1dp" /> 
</android.support.v4.widget.DrawerLayout> 

XML

<?xml version="1.0" encoding="utf-8"?> 


<android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/swipe_container" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <ScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:background="@android:color/transparent" 
      android:orientation="vertical"> 

      <LinearLayout 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:background="@android:color/transparent" 
       android:orientation="vertical"> 

       <TextView 
        android:id="@+id/pullToConnect" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_centerHorizontal="true" 
        android:layout_gravity="center" 
        android:layout_marginTop="10dp" 
        android:gravity="center" 
        android:text="@string/pull_to_connect" 
        android:textColor="@android:color/white" 
        android:textSize="23dp" /> 

      </LinearLayout> 


      <RelativeLayout 
       android:id="@+id/relative" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 


       <TextView 
        android:id="@+id/tv1" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_centerHorizontal="true" 
        android:layout_marginTop="24dp" 
        android:gravity="center_horizontal" 
        android:padding="15dp" 
        android:textColor="@android:color/white" 
        android:textSize="30dp" /> 

      </RelativeLayout> 
     </LinearLayout> 
    </ScrollView> 
</android.support.v4.widget.SwipeRefreshLayout> 
+0

코드 (특히 XML과 실제로 레이아웃 /보기를 초기화 자바)가 말해 불가능을 보지 않고 : savedInstanceState가 null의 경우, 그게 당신의 활동의 첫 번째 창조 의미합니다. – zgc7009

+0

조각을 TextView에 추가하거나 바꾸시겠습니까? 특히 setRetainInstance (true)를 사용하는 경우 생성/다시 시작 메소드에 단편을 추가하는 방법으로이 문제가 발생하는 것을 보았습니다. –

+0

코드를 추가해 주셔서 감사합니다. 도움을 감사하십시오. – Yosi199

답변

1
fm = getFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 

ft.add(R.id.frameContainer, main, "main"); 
ft.setCustomAnimations(R.animator.fade_in, android.R.animator.fade_out); 
ft.add(R.id.mediaControllerFrame, mdc); 
ft.commit(); 
getFragmentManager().executePendingTransactions(); 

첫 번째에서 단편 초기화 만 수행해야합니다 (onCreate()). 은 구성 변경 사항을 통해 조각을 유지하므로, 화면을 회전하려면 onCreate()이 다시 호출되며 매번 이전 인스턴스 위에 다른 인스턴스 인 mainmdc이 추가됩니다.

대신 조각 초기화 코드를 savedInstanceState이라는 null 체크로 감싸십시오.

if (savedInstanceState == null) { 
    fm = getFragmentManager(); 
    FragmentTransaction ft = fm.beginTransaction(); 

    ft.add(R.id.frameContainer, main, "main"); 
    ft.setCustomAnimations(R.animator.fade_in, android.R.animator.fade_out); 
    ft.add(R.id.mediaControllerFrame, mdc); 
    ft.commit(); 
    getFragmentManager().executePendingTransactions(); 
} 
+0

감사합니다. 항상 잊지 않는 것 같습니다. – Yosi199

+0

마음에 들지 않으면 또 다른 질문이 있습니다. 항상 조각을 지닌 클래스의 새 인스턴스를 만들어야합니까? 또는 인스턴스를 공유 할 수 있습니까? 즉, 조각 클래스를 한 번 초기화 한 다음 사용자가 onClick을 수행 한 다음 다른 조각을 추가했다고 가정 해 봅시다. 이제 사용자가 무언가를 클릭하여 이전 단편을 다시로드한다고 가정 해 봅시다. 단편 클래스의 새 인스턴스를 사용해야합니까, 아니면 이전 단편의 참조를 다시 사용할 수 있습니까? – Yosi199

+1

나는 항상 정직하게 새로운 것을 사용한다. 일반적으로 주위를 지키려고 노력하는 것이 가치가 없으며 미묘한 버그가 발생할 수 있습니다. 파편이 정말로 비싸지 않으면, 새로운 것을 만들어야합니다. – kcoppock

관련 문제