重新启动应用程序后,android textview会加倍/镜像/屏蔽

重新启动应用程序后,android textview会加倍/镜像/屏蔽,android,textview,Android,Textview,这是在以下情况下发生的: 1) 我打开我的应用程序,执行一些常规操作。 2) 关闭我的应用程序(清除碎片和活动)。 3) 从应用程序抽屉重新打开我的应用程序 我觉得这是我在生命周期事件中正在做的事情。 有人遇到过吗?怎么了 活动代码(视图初始化) 片段代码 public class Play_Main extends Fragment implements IListener { private static final String TAG = "Play_Main_Fragment

这是在以下情况下发生的:

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格式:

<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>
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();
}

片段的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>

您应该只在第一次调用
onCreate()
时执行此片段初始化。
FragmentManager
处理跨配置更改保留片段的操作,因此如果要旋转屏幕,
onCreate()
将再次调用,并且每次都会在旧实例的基础上添加另一个
main
mdc
实例

相反,使用
savedInstanceState
将片段初始化代码包装在空检查中。如果
savedInstanceState
为空,则表示这是您的活动的第一次创建:

<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>
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();
}

如果看不到代码(特别是xml和java,您实际上在其中初始化布局/视图),就无法判断。您是在添加片段还是用TextView替换片段?我只在create/resume方法上添加了一个片段就看到了这种情况,特别是在使用setRetainInstance(true)时。谢谢,我添加了代码。感谢您的帮助。是的,我正在使用片段管理器处理片段。如果您不介意,我还有一个问题-我是否应该始终创建一个包含片段的类的新实例?或者我可以分享这个实例。我的意思是,假设我初始化了fragment类一次,然后用户执行了onClick,然后我添加了一个不同的片段。现在让我们假设用户再次单击某个东西来加载以前的片段-我应该使用片段类的新实例还是可以重复使用旧实例的引用?老实说,我总是使用新实例。它通常不值得尝试保持它们的复杂性,而且它可能会导致一些微妙的错误。除非你的片段真的很昂贵,否则我会坚持做一个新的。