atozcodes
atozcodes

Reputation: 75

How move Mainactivity to Fragment?

How to change all the coding that is mainactivity to fragment. I tried, but could not rewrite it. All the code in it should be written as a fragment. What can I do about it?

This coding is in MainActivity. How to change it into a fragment?

public class MainActivity extends AppCompatActivity implements HomeAdapter.ItemListener{
    
        private RecyclerView recyclerView;
        private ArrayList<Item> arrayList;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
    
            recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
            arrayList = new ArrayList<>();
    
            arrayList.add(new Item("Item 1", R.drawable.battle, ""));
            arrayList.add(new Item("Item 2", R.drawable.beer, "#3E51B1"));
            arrayList.add(new Item("Item 3", R.drawable.ferrari, "#673BB7"));
            arrayList.add(new Item("Item 4", R.drawable.jetpack_joyride, "#4BAA50"));
            arrayList.add(new Item("Item 5", R.drawable.three_d, "#F94336"));
            arrayList.add(new Item("Item 6", R.drawable.terraria, "#0A9B88"));
    
            HomeAdapter adapter = new HomeAdapter(this, arrayList, this);
            recyclerView.setAdapter(adapter);
    
    
            /**
             AutoFitGridLayoutManager that auto fits the cells by the column width defined.
             **/
    
            //AutoFitGridLayoutManager layoutManager = new AutoFitGridLayoutManager(this, 500);
            //recyclerView.setLayoutManager(layoutManager);
    
    
            /**
             Simple GridLayoutManager that spans two columns
             **/
            GridLayoutManager manager = new GridLayoutManager(this, 2, GridLayoutManager.VERTICAL, false);
            recyclerView.setLayoutManager(manager);
        }
    
        @Override
        public void onItemClick(Item item) {
            Toast.makeText(getApplicationContext(), item.text + " is clicked", Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            //https://www.journaldev.com/13792/android-gridlayoutmanager-example
            int id = item.getItemId();
    
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    }

I tried many times to change this and there was nothing I could do.

Upvotes: 0

Views: 91

Answers (1)

Pam Ix
Pam Ix

Reputation: 468

With All info I tried this (if not work than tell me the error)

In MainActivity OnCreate

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // fragment
        Fragment fragment = getFragmentManager().findFragmentByTag(FragmentType.OVERLAY.getTag());
        if (fragment == null) {
            fragment = OverlayFragment.newInstance();
        }
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.replace(android.R.id.content, fragment, FragmentType.OVERLAY.getTag());
        ft.commit();

    }


    private enum FragmentType {
        OVERLAY("overlay");
        private final String tag;

        FragmentType(String tag) {
            this.tag = tag;
        }

        public String getTag() {
            return tag;
        }
    }


}

Create a java class OverlayFragment

import android.app.Fragment;
import android.content.ClipData;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

import static androidx.recyclerview.widget.GridLayoutManager.*;

public class OverlayFragment extends Fragment implements HomeAdapter.ItemListener{
    View view;
    private RecyclerView recyclerView;
    private ArrayList<Item> arrayList;
// use your package name
    public static com.rad.mls.OverlayFragment newInstance() {
        return new com.rad.mls.OverlayFragment();
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.activity_main, container, false);
        Toolbar toolbar = view.findViewById(R.id.toolbar);
        ((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);

        recyclerView = view.findViewById(R.id.recyclerView);
        arrayList = new ArrayList<>();

        arrayList.add(new Item("Item 1", R.drawable.custom, ""));
        arrayList.add(new Item("Item 2", R.drawable.beer, "#3E51B1"));
        arrayList.add(new Item("Item 3", R.drawable.ferrari, "#673BB7"));
        arrayList.add(new Item("Item 4", R.drawable.jetpack_joyride, "#4BAA50"));
        arrayList.add(new Item("Item 5", R.drawable.three_d, "#F94336"));
        arrayList.add(new Item("Item 6", R.drawable.terraria, "#0A9B88"));

        HomeAdapter adapter = new HomeAdapter(getActivity(), arrayList, (HomeAdapter.ItemListener) getActivity()); // ???
        recyclerView.setAdapter(adapter);

        GridLayoutManager manager = new GridLayoutManager(getActivity(), 2, VERTICAL, false);
        recyclerView.setLayoutManager(manager);
        return view;
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflate) {
        super.onCreateOptionsMenu(menu, inflate);
        getActivity().getMenuInflater().inflate(R.menu.menu_main, menu);
    }
 @Override
    public void onItemClick(Item item) {
        Toast.makeText(getActivity(), item.text + " is clicked", Toast.LENGTH_SHORT).show();
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }


}

with all the info I tried it converting it with some changes . if it didn't suit than tell me or use this way to create your fragment

Upvotes: 2

Related Questions