片段交易重复

时间:2018-06-12 12:54:55

标签: android android-fragments

所以开始我有一个活动,在那个活动里面我有一个带有3个标签的tabbedlayout是我的片段,现在我的问题是当我尝试从活动传递一个值时让我们调用它片段值得到正确传递但是我的tabbedlayout中的3个片段被复制了。这对我来说已经有一段时间了。

提前致谢

这是我的activity.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".aktivnosti.ActivityTask">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/appbar_padding_top"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:layout_weight="1"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/AppTheme.PopupOverlay"
            app:title="@string/app_name">

        </android.support.v7.widget.Toolbar>

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabGravity="fill">

            <android.support.design.widget.TabItem
                android:id="@+id/tabItem"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/tab_text_1">
            </android.support.design.widget.TabItem>     

            <android.support.design.widget.TabItem
                android:id="@+id/tabItem2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/tab_text_2" />

            <android.support.design.widget.TabItem
                android:id="@+id/tabItem3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/tab_text_3" />

        </android.support.design.widget.TabLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>

我用来传递活动的价值的代码 - &gt; fragmentA,在activity.java里面

        TodoFragment fragment = new TodoFragment();
    final android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragment.setArguments(value);

    fragmentTransaction.replace(R.id.container, fragment,"a");
    fragmentTransaction.addToBackStack("a");
    fragmentTransaction.commit();

viewpager.java

@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            return new TodoFragment();
        case 1:
            return new DoingFragment();
        case 2:
            return new KoncanoFragment();
        default:
            return null;
    }
}

FragmentA.xml

   <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/coordlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView

        android:id="@+id/list"
        android:name="com.example.matic.projectplan.aktivnostiFragment"
        android:layout_width="match_parent"
        android:layout_height="500dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        app:layoutManager="android.support.v7.widget.LinearLayoutManager"
        tools:context=".fragmenti.TodoFragment"
        tools:listitem="@layout/fragment_todo" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end|bottom"
        android:layout_margin="@dimen/fab_margin"
        app:srcCompat="@android:drawable/ic_menu_add" />
</android.support.design.widget.CoordinatorLayout>

另一个问题编辑

 @Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         final Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.fragment_todo_list, container, false);
    FloatingActionButton floatingActionButton = view.findViewById(R.id.fab);
    recyclerView = (RecyclerView) view.findViewById(R.id.list);

    bundle = this.getArguments();
    if(bundle != null) {
        fk_id = bundle.getLong("fk");
        Toast.makeText(getContext(), "iz fragmenta" + fk_id, Toast.LENGTH_SHORT).show();
        floatingActionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                fk_id = bundle.getLong("fk");
                Toast.makeText(v.getContext(), "iz fragmenta" + fk_id, Toast.LENGTH_SHORT).show();
                LayoutInflater li = LayoutInflater.from(getActivity());
                View popupView = li.inflate(R.layout.popup_layout, null);
                final EditText editText = popupView.findViewById(R.id.userInput);
                AlertDialog.Builder adb = new AlertDialog.Builder(getContext());

                adb.setView(popupView);
                adb.setCancelable(false)
                        .setPositiveButton("Dodaj", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                String naziv = editText.getText().toString();
                                Aktivnost_ ak = new Aktivnost_(naziv, "15-jun", fk_id, "kajetan", "todo");
                                dodajAktivnost(ak);
                                array.add(ak);
                                Toast.makeText(getContext(), "dodano", Toast.LENGTH_LONG).show();

                            }
                        })
                        .setNegativeButton("Prekliči", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                dialogInterface.cancel();
                                Toast.makeText(getContext(), "Preklical sem", Toast.LENGTH_LONG).show();
                            }
                        });
                AlertDialog alertDialog = adb.create();
                alertDialog.setCancelable(true);
                alertDialog.show();
            }
        });



        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL));
        mmAdapter = new ToDoRecyclerViewAdapter(listAktivnosti(fk_id), getContext(), mListener);
        mmAdapter.setOnItemClickListner(new ToDoRecyclerViewAdapter.onItemClickListner() {
            @Override
            public void onClick(long i) {
                Intent intent = new Intent(getActivity(), PodrobnostiActivity.class);
                intent.putExtra("key_id", i);
                startActivity(intent);
                Toast.makeText(getContext(), "" + i, Toast.LENGTH_SHORT).show();
            }
        });
        mmAdapter.setOnLongClick(new ToDoRecyclerViewAdapter.OnLongClickListener_() {
            @Override
            public void onLongClick(long i, String item) {
                if (item.equals("doing")) {
                    boolean update_1 = db.updateList(i, item);
                    if (update_1) {
                        //NAREDI SE LEPE ANIMACIJE
                        android.support.v4.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
                        ft.detach(TodoFragment.this).attach(TodoFragment.this).commit();

                        Toast.makeText(getContext(), "Dodano v bazo.!", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(getContext(), "Prislo je do napake!", Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
        recyclerView.setAdapter(mmAdapter);
    }
    return view;
}

1 个答案:

答案 0 :(得分:0)

抱歉我的英语不好,首先要创建像这样的片段适配器 名为MainFragmentAdapter.java

public class MainFragmentAdapter extends FragmentPagerAdapter {

private List<BaseFragment> fragments;
private List<String> titles;

public MainFragmentAdapter(FragmentManager fm) {
    super(fm);
    fragments = new ArrayList<>();
    titles = new ArrayList<>();
}

@Override
public BaseFragment getItem(int position) {
    return fragments.get(position);
}

@Override
public int getCount() {
    return fragments.size();
}

@Nullable
@Override
public CharSequence getPageTitle(int position) {
    return titles.get(position);
}

public void addFragment(String title, BaseFragment fragment) {
    titles.add(title);
    fragments.add(fragment);
}
}

现在在您的活动类中创建一个方法,并在活动的onCreate方法

中调用它
private void setupViewPager() {
    MainFragmentAdapter fragmentAdapter = new MainFragmentAdapter(getSupportFragmentManager());
    fragmentAdapter.addFragment(getString(R.string.fragment_a), new FragmentA());
    fragmentAdapter.addFragment(getString(R.string.fragment_b), new FragmentB());
    fragmentAdapter.addFragment(getString(R.string.fragment_c), new FragmentC());
    ViewPager mViewPager = findViewById(R.id.view_pager); 
    mViewPager.setAdapter(fragmentAdapter);
    TabLayout mTabLayout = findViewById(R.id.tab_layout); 
    mTabLayout.setupWithViewPager(mViewPager);
    mViewPager.setOffscreenPageLimit(fragmentAdapter.getCount() - 1);
    mViewPager.setCurrentItem(0);
}

你的活动的xml是这样的。

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/activity_background"
    tools:context=".activities.DrawingListActivity">

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/white"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?android:attr/actionBarSize"
        android:background="@color/colorAccent"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tab_layout"
            android:layout_width="match_parent"
            android:layout_height="?android:attr/actionBarSize"
            android:background="@color/white"
            app:tabGravity="center"
            app:tabIndicatorHeight="2dip"
            app:tabMode="scrollable"
            app:tabSelectedTextColor="@color/colorAccent"
            app:tabTextColor="#5000BFA5" />

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</android.support.design.widget.CoordinatorLayout>

希望这可以帮助你。 : - )