Стараюсь не повторяться (андроид / ява)

Что происходит? Я новичок в развитии, и везде я читаю "Не повторяйся", поэтому я действительно хочу повторить это. есть фрагмент кода, который я копировал и вставлял в каждое действие моего приложения, и я подозреваю, что может быть способ не повторять его - возможно, создать класс и вызвать его методы - но я не знаю, как реализовать Это. код ниже - это то, о чем я говорю: что-то, что я использую в своем навигационном ящике, и это внутри основного класса каждого действия моего приложения:

@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 ответа

Решение

Вы можете создать новый класс, который расширяет 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 {
    ...
}

Как вы можете ясно увидеть в следующем блоке

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

И да, это было записано только один раз.

Просто создайте класс утилит, как это

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");
Другие вопросы по тегам