片段中删除先前视图的问题

时间:2018-10-18 14:54:51

标签: java android android-fragments

我在android中创建了一个包含2个函数的片段,调用该片段时首先调用startview(),然后当用户单击按钮childfragment()时调用。然后应该从startview()中删除该视图,然后将其替换为childfragment()中的newview,这就是我认为的方法。但是,它并没有删除旧视图并将新视图放在旧视图之上。甚至以为我已经放置了mContainer.removeAllViews();,它并没有删除旧视图。我想念什么?请帮忙。

这是代码

@SuppressLint("ValidFragment")
public class FragmentSideContent extends android.app.Fragment {

    //private OnFragmentInteractionListener mListener;
    Context context;
    View view,trueview;
    ListView listView;
    ListAdapter listAdapter;

    private LayoutInflater mInflater;
    private ViewGroup mContainer;

    int[] image = {1,2,3};
    String[] titleText = {"one","two","three","one","two","three","one","two","three","one","two","three"};
    String[] subTitleText = {"one","two","three","one","two","three","one","two","three","one","two","three"};

    public FragmentSideContent(Context context) {
        this.context = context;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
        mInflater = inflater;
        mContainer = container;

        startview();

        return trueview;
    }

    public void startview(){
        view = mInflater.inflate(R.layout.fragment_sidecontent,mContainer,false);
        listView = (ListView) view.findViewById(R.id.noteList);
        listAdapter = new ListAdapter(context,image,titleText,subTitleText);
        listView.setAdapter(listAdapter);
        trueview = view;
    }

    public void childfragment(){
        mContainer.removeAllViews();
        View newview = mInflater.inflate(R.layout.fragment_sidecontent,mContainer,false);
        Fragment childFragment = new FragmentList(context);
        FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
        transaction.replace(R.id.child_fragment_container, childFragment).commit();

        mContainer.addView(newview);
        mContainer.addView(trueview);
        trueview = newview;

    }
}

1 个答案:

答案 0 :(得分:0)

我建议您在片段布局中放置一些GroupView来执行此操作。

fragment_layout.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools"
             android:id="@+id/container"
             android:layout_width="match_parent"
             android:layout_height="match_parent">
</FrameLayout>

在您的Fragment.java中

     View view;
     Framelayout fContainer;
     @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container,
                               Bundle savedInstanceState) {
          view = inflater.inflate(R.layout.fragment_layout, container, false);

        return startView();
      }

      public View startview(){
        fContainer = (Framelayout) view.findViewById(R.id.container);
        listView = (ListView) view.findViewById(R.id.noteList);
        listAdapter = new ListAdapter(context,image,titleText,subTitleText);
        listView.setAdapter(listAdapter);
        return view;
    }


public void childfragment(){
        fContainer.removeAllViews();
        Fragment childFragment = new FragmentList(context);
        FragmentTransaction transaction = 
        getChildFragmentManager().beginTransaction();
        transaction.replace(R.id.container, childFragment).commit();    
    }

现在在另一个片段(FragmentList)的oncreateview中,将要膨胀的视图放入。

FragmentList.java

@Override
          public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                   Bundle savedInstanceState) {
             View newview = mInflater.inflate(R.layout.fragment_sidecontent,mContainer,false);

            return newview;
          }