Android Fragments Overlapping

痞子三分冷 提交于 2019-12-11 07:57:19

问题


In my Android app I have an Edit Text and a button which when clicked adds a fragment to my main activity containing the message that was written in my Edit Text. The problem is that when I change the message and click the button the fragments overlap. I have already tried to add a background to my fragment's layout but when I do that the background appears on top of all messages (the text view is not even visible, only selectable for copy/pasting).

The Code:

Method in Main Activity which adds the fragment:

public void viewMessage(View view)
{
    // Create a new Fragment to be placed in the activity layout
    ViewMessageFragment fragment = new ViewMessageFragment();

    //Add the message to the fragment
    //Get the message
    EditText editText = (EditText) findViewById(R.id.edit_message);
    String message = editText.getText().toString();
    //Add it to the fragment
    Bundle bundle = new Bundle();
    bundle.putString(EXTRA_MESSAGE, message);
    fragment.setArguments(bundle);

    // Add the fragment to the 'view_message' FrameLayout
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction transaction = fragmentManager.beginTransaction();
    transaction.replace(R.id.view_message, fragment);
    transaction.commit();
}

Fragment:

public class ViewMessageFragment extends Fragment{

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
    //Get the message
    String message = getArguments().getString(MainActivity.EXTRA_MESSAGE);

    //Create the TextView
    TextView textView = new TextView(container.getContext());
    textView.setTextSize(20);
    textView.setGravity(Gravity.CENTER);
    textView.setWidth(-1);//This line is the same than android:layout_width="match_parent"
    textView.setHeight(-1);//This line is the same than android:layout_height="match_parent"
    textView.setTextIsSelectable(true);
    textView.setText(message);

    //Add the TextView
    container.addView(textView);

    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_view_message, container, false);
}
}

Fragment's Layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</LinearLayout>

I would really appreciate if someone could help me! Thank You!

Edit: Am I adding the textView to the fragment container(a FrameLayout) in the next line?

container.addView(textView);

If I am, can that be causing the problem?


回答1:


SOLVED:

The problem was that I was adding the TextView to the fragment's container (a FrameLayout), I solved it adding the TextView to the Fragmet's Layout and dynamically changing its text.

The Code:

Fragment:

public class ViewMessageFragment extends Fragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState)
{
    //Get the message
    String message = getArguments().getString(MainActivity.EXTRA_MESSAGE);

    //Inflate the layout in a View. This way you get the fragments layout
    View mContainer = inflater.inflate(R.layout.fragment_view_message, container, false);

    //Find the TextView contained in the fragments Layout and change its message
    TextView textView = (TextView) mContainer.findViewById(R.id.show_message);
    textView.setText(message);

    //Return the layout
    return mContainer;
}

Fragment's Layout:

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

<TextView android:id="@+id/show_message"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:textSize="20sp"
    android:textIsSelectable="true"/>

</LinearLayout>



回答2:


Here i Found the better solution: Well Setting up fragment background color is not a solution because fragment will be still in the activity stack which may consume memory.

Solution would be remove all views from your framelayout before adding any new fragment.

private void changeFragment(Fragment fr){
FrameLayout fl = (FrameLayout) findViewById(R.id.mainframe);
fl.removeAllViews();
FragmentTransaction transaction1 = getSupportFragmentManager().beginTransaction();
transaction1.add(R.id.mainframe, fr);
transaction1.commit();}


来源:https://stackoverflow.com/questions/25110067/android-fragments-overlapping

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!