【问题标题】:How move Mainactivity to Fragment?如何将 Mainactivity 移至 Fragment?
【发布时间】:2021-04-10 12:44:37
【问题描述】:

如何将所有主要活动的编码更改为片段。我试过了,但无法重写。里面的所有代码都应该写成一个片段。我该怎么办?

此编码在 MainActivity 中。怎么改成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);
        }
    }

我尝试了很多次来改变这一点,但我无能为力。

【问题讨论】:

    标签: java android android-fragments android-activity


    【解决方案1】:

    我尝试了所有信息(如果不起作用,请告诉我错误)

    在 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;
            }
        }
    
    
    }
    

    创建一个java类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);
        }
    
    
    }
    

    我尝试了所有信息,并对其进行了一些更改。如果它不适合,请告诉我或使用这种方式来创建您的片段

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    相关资源
    最近更新 更多