簡體   English   中英

單擊將片段更改為另一個按鈕時,片段不會進行交易

[英]fragment wont transaction when click on the button which change the fragment to another

當我單擊項目以更改片段時,我有2個帶有底部導航視圖的片段,但沒有任何反應,它仍然顯示默認片段

這里的代碼

MainActivity.class

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        BottomNavigationView bottomNavigationView =(BottomNavigationView)findViewById(R.id.navigation);
        bottomNavigationView.setSelectedItemId(R.id.home);
        bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()){

                    case R.id.community:
                        //onClick on Community Button
                        Alert();
                        break;
                    case R.id.home:
                        //OnClick on Home Button
                       goHome();

                        break;

                    case R.id.setting:
                        //OnClick on Setting Button
                       goSetting();
                        break;
                }
                return true;

            }
        });
    }
    //THIS Methods to Transaction between Fragments
    private void  goHome(){
        HomeF home = new HomeF();
        FragmentManager fm = getFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        ft.replace(R.id.fragmentlayout,home);
    }
    private void goSetting(){
        SettingF setting = new SettingF();
        FragmentManager fa = getFragmentManager();
        FragmentTransaction fs = fa.beginTransaction();
        fs.replace(R.id.fragmentlayout,setting);
    }
    private void Alert(){
        AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
        alert.setTitle("Attention");
        alert.setMessage("This section is Under Development stay tuned for the Biggest Openning");
        alert.show();

        Toast.makeText(MainActivity.this,"Community",Toast.LENGTH_LONG).show();

    }

}

這是Frgment Class,它是默認視圖

HomeFragment.class

 public class HomeF extends Fragment {

    private  RecyclerView rc;
    private Context mContext;
    private List<listitems> list = new ArrayList<>();
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState){
            // Inflate the layout for this fragment
           final View view = inflater.inflate(R.layout.fragment_home, container, false);

        rc = view.findViewById(R.id.recycler);
        rc.setLayoutManager(new GridLayoutManager(this.getActivity(),2));
        rc.setHasFixedSize(true);

        list.add(new listitems(
                1
                ,"Mobile"
                ,R.drawable.phone
        ));

        list.add(new listitems(
                1
                ,"Laptop"
                ,R.drawable.laptop
        ));

        list.add(new listitems(
                1
                ,"CAR"
                ,R.drawable.car
        ));

        list.add(new listitems(
                1
                ," TV"
                ,R.drawable.tv
        ));
        list.add(new listitems(
                1
                ,"House"
                ,R.drawable.house
        ));

        itemsAdapter adapter = new itemsAdapter(this.getActivity(),list);
        rc.setAdapter(adapter);
        rc.setItemAnimator(new DefaultItemAnimator());
        return view;

    }
}

適配器類

 public class itemsAdapter extends RecyclerView.Adapter<itemsAdapter.ViewHolder>  {

    private Context mContex;
    private List<listitems> myList ;

    public itemsAdapter(Context mContex, List<listitems> myList) {
        this.mContex = mContex;
        this.myList = myList;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View row = LayoutInflater.from(parent.getContext()).inflate(R.layout.main_row,parent,false);
        ViewHolder holder = new ViewHolder(row);
        return holder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {

       final listitems listy = myList.get(position);

       holder.txt.setText(listy.getTitle());
        Glide.with(mContex).asBitmap().thumbnail(0.5f)
                .load(listy.getImage())
                .into(holder.img);
    }

    @Override
    public int getItemCount() {
        return myList.size();
    }


    public class ViewHolder extends RecyclerView.ViewHolder {

        public ImageView img;
        public TextView txt;

        public ViewHolder(View itemView) {
            super(itemView);

            img =itemView.findViewById(R.id.imgLogo);
            txt = itemView.findViewById(R.id.txtTitle);

        }
    }

}

感謝您的寶貴時間。

替換片段后,提交FragmentTransaction。

ft.commit();

在兩種方法中

HomeF home = new HomeF();
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fragmentlayout,home);
ft.commit();

您需要在最后提交事務。 對於兩種方法

private void  goHome(){
    HomeF home = new HomeF();
    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.replace(R.id.fragmentlayout,home);
    ft.commit();
}
private void goSetting(){
    SettingF setting = new SettingF();
    FragmentManager fa = getFragmentManager();
    FragmentTransaction fs = fa.beginTransaction();
    fs.replace(R.id.fragmentlayout,setting);
    ft.commit();
}

或者可能您應該使用通用方法

private void replaceFragment(Fragment f){
        FragmentManager fa = getFragmentManager();
        FragmentTransaction fs = fa.beginTransaction();
        fs.replace(R.id.fragmentlayout,f);
        ft.commit();
    }

並在該方法中傳遞Fragment,而不是為每個片段事務制作不同的方法。

嘗試使用SupportFragmentManager而不是FragmentManager

 SettingF setting = new SettingF();
 getSupportFragmentManager().beginTransaction()
                                .add(R.id.fragmentlayout, setting, "setting")
                                .commit();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM