【问题标题】:Android: optimizing fragment transitionsAndroid:优化片段转换
【发布时间】:2016-07-03 10:56:13
【问题描述】:

所以在我的应用程序中,我有一堆片段供用户浏览。我的活动类中有很多用于片段转换的方法。它们彼此非常相似,唯一的区别是 newFragment 的类。这是其中一种方法:

public void onHelpSelected() {

    slideInRight();

    final Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {

            HelpFragment newFragment = new HelpFragment();
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.fragment_container, newFragment);
            transaction.addToBackStack(null);
            transaction.commit();

            slideOutLeft();
        }

    }, 500);

}

然后,我还有一些描述每个片段的类。它们彼此也非常相似:它们的区别仅在于按钮的数量和这些按钮的作用(但大多数按钮用于片段转换)。以下是这些类之一:

    public class AuthFragment extends Fragment {

    Button authRegButton;
    Button authHelpButton;

    OnHelpButtonListener helpCallback;
    OnRegButtonListener regCallback;

    @Override
    public View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_auth, container, false);


        authHelpButton = (Button) view.findViewById(R.id.auth_help_button);
        View.OnClickListener authHelpListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                helpCallback.onHelpSelected();
            }
        };
        authHelpButton.setOnClickListener(authHelpListener);


        authRegButton = (Button) view.findViewById(R.id.auth_reg_button);
        View.OnClickListener authRegListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                regCallback.onRegSelected();
            }
        };
        authRegButton.setOnClickListener(authRegListener);

        return view;
    }

    public interface OnHelpButtonListener {
        void onHelpSelected();
    }

    public interface OnRegButtonListener {
        void onRegSelected();
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        try {
            helpCallback = (OnHelpButtonListener) context;
        } catch (ClassCastException e) {
            throw new ClassCastException(context.toString()
                    + " must implement OnHelpButtonListener");
        }

        try {
            regCallback = (OnRegButtonListener) context;
        } catch (ClassCastException e) {
            throw new ClassCastException(context.toString()
                    + " must implement OnRegButtonListener");
        }
    }

}

所以,我有很多非常相似的代码。我敢打赌,有一种方法可以让所有这些代码看起来更漂亮,工作效率更高。

因此,我的问题是我该怎么做? :)

谢谢!

【问题讨论】:

    标签: java android optimization transition


    【解决方案1】:

    如果有人需要,这就是我解决这个问题的方法:)

    所以我为我的片段创建了一个抽象类,并在那里编写了所有代码:

    public abstract class LoginFragment extends Fragment {
    
    MediaPlayer clickPlayer;
    int layoutId;
    View view;
    OnButtonListener buttonCallback;
    
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    
        view = inflater.inflate(layoutId, container, false);
    
        return view;
    
    }
    
    public interface OnButtonListener {
        void onButtonSelected(LoginFragment fragment);
    }
    
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
    
        try {
            buttonCallback = (OnButtonListener) context;
        } catch (ClassCastException e) {
            throw new ClassCastException(context.toString()
                    + " must implement OnButtonListener");
        }
    
    }
    
    public MyButton setUpButton(int buttonId) {
    
        final MyButton button = (MyButton) view.findViewById(buttonId);
        View.OnClickListener authHelpListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                clickPlayer = MediaPlayer.create(getContext(), R.raw.click);
                clickPlayer.start();
                LoginFragment newFragment = determineFragment(button);
                buttonCallback.onButtonSelected(newFragment);
            }
        };
        button.setOnClickListener(authHelpListener);
    
        return button;
    
    }
    
    public LoginFragment determineFragment(MyButton button) {
    
        LoginFragment result;
        int buttonId = button.getId();
    
        switch (buttonId){
    
            case R.id.auth_help_button:
                result = new HelpFragment();
                break;
            case R.id.agr_cancel_button:case R.id.help_cancel_button:
            case R.id.reg_cancel_button:case R.id.reg_cont_cancel_button:
                result = new AuthFragment();
                break;
            case R.id.agr_back_button:case R.id.reg_cont_button:
                result = new RegContFragment();
                break;
            case R.id.reg_cont_agr_button:
                result = new AgrFragment();
                break;
            case R.id.auth_reg_button:
                result = new RegFragment();
                break;
            default:
                result = null;
                break;
        }
    
        return result;
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      相关资源
      最近更新 更多