Стараюсь не повторяться (андроид / ява)
Что происходит? Я новичок в развитии, и везде я читаю "Не повторяйся", поэтому я действительно хочу повторить это. есть фрагмент кода, который я копировал и вставлял в каждое действие моего приложения, и я подозреваю, что может быть способ не повторять его - возможно, создать класс и вызвать его методы - но я не знаю, как реализовать Это. код ниже - это то, о чем я говорю: что-то, что я использую в своем навигационном ящике, и это внутри основного класса каждого действия моего приложения:
@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");