有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

尽量不重复我自己(安卓/java)

怎么了? 我是一个开发新手,无论在哪里我都读到“不要重复你自己”,所以我真的很介意重复我自己。 我在应用程序的每一个活动中都复制并粘贴了一段代码,我怀疑可能有一种方法可以不重复它——可能创建一个类并调用它的方法——但我不知道如何实现它。 下面的代码就是我所说的:我在导航抽屉中使用的东西,它位于我应用程序每个活动的主类中:

@Override
        public void onItemClick(AdapterView<?> parent, View arg1, int position,
                long arg3) {

            if (position == 0) {
                Toast.makeText(this, "categories baby", Toast.LENGTH_SHORT).show();
            } else if (position == 1){

                final Context context = this;

                Intent getUserData = getIntent();
                String userEmail = getUserData.getStringExtra("user_email");

                Intent intent = new Intent(context, NewAdActivity.class);
                intent.putExtra("userEmail", userEmail);
                startActivity(intent);


            } else if (position == 2){

                final Context context = this;

                Intent getUserData = getIntent();
                String userEmail = getUserData.getStringExtra("user_email");

                Intent intent = new Intent(context, AdListActivity.class);
                intent.putExtra("userEmail", userEmail);
                startActivity(intent);

            } else {
                Session session = Session.getActiveSession();
                session.closeAndClearTokenInformation();

                Intent intent = new Intent(context, MainActivity.class);
                startActivity(intent);
            }
        }

你能给我一些提示,告诉我如何重复使用这个而不是复制/粘贴吗? 谢谢


共 (3) 个答案

  1. # 1 楼答案

    正如你可以在下面的方块中清楚地看到的

            } else if (position == 1){
    
                final Context context = this;
    
                Intent getUserData = getIntent();
                String userEmail = getUserData.getStringExtra("user_email");
    
                Intent intent = new Intent(context, NewAdActivity.class);
                intent.putExtra("userEmail", userEmail);
                startActivity(intent);
    
    
            } else if (position == 2){
    
                final Context context = this;
    
                Intent getUserData = getIntent();
                String userEmail = getUserData.getStringExtra("user_email");
    
                Intent intent = new Intent(context, AdListActivity.class);
                intent.putExtra("userEmail", userEmail);
                startActivity(intent);
    
            }
    

    除了活动的类之外,您正在两次执行相同的操作。因此,你可以把它撕成这样一个函数

            } else if (position == 1){
                beginAdActivity(NewAdActivity.class);
            } else if (position == 2){
                beginAdActivity(AdListActivity.class);
            }
     }
    
     public void beginAdActivity(Class<?> activityClass)
     {
          final Context context = this;
    
          Intent getUserData = getIntent();
          String userEmail = getUserData.getStringExtra("user_email");
    
          Intent intent = new Intent(context, activityClass);
          intent.putExtra("userEmail", userEmail);
          startActivity(intent);
     }
    

    塔达,只写了一次

  2. # 2 楼答案

    只需创建这样一个util类

    public class MyUtils{
    
        public static void jumpToNewAd(Activity mContext){
            Intent getUserData = mContext.getIntent();
            String userEmail = getUserData.getStringExtra("user_email");
    
            Intent intent = new Intent(mContext, NewAdActivity.class);
            intent.putExtra("userEmail", userEmail);
            mContext.startActivity(intent);
        }
        public static void jumpToAdList(Activity mContext){
            Intent getUserData = mContext.getIntent();
            String userEmail = getUserData.getStringExtra("user_email");
    
            Intent intent = new Intent(mContext, AdListActivity.class);
            intent.putExtra("userEmail", userEmail);
            mContext.startActivity(intent);
        }
        public static void jumpToMain(Activity mContext){
            Session session = Session.getActiveSession();
            session.closeAndClearTokenInformation();
    
            Intent intent = new Intent(mContext, MainActivity.class);
            mContext.startActivity(intent);
        }
    
        public static void ting(Activity mContext,String message){
            Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show();
        }
    
    }
    

    你想叫什么就叫什么

    MyUtils.jumpToAdList(this);
            MyUtils.jumpToNewAd(this);
            MyUtils.jumpToMain(this);
            MyUtils.ting(this,"Catagories Baby");
    
  3. # 3 楼答案

    您可以创建一个扩展Activity的新类,并实现您的代码,然后让您的所有活动扩展该类

    该代码似乎是AdapterView.OnItemClickListener的实现,因此您可以创建如下内容:

    public abstract class MyActivityWithListener extends Activity 
            implements AdapterView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View arg1, int position, long arg3) {
            ....
        }
    
    }
    

    然后你的主要活动可能是:

    public class MainActivity extends MyActivityWithListener {
        ...
    }