Reputation: 75
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
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