понедельник, 15 июля 2013 г.

Создаем базовые классы

Написание базового класса очень хорошо поможет вам в разработке, он сокращает повторяющийся код, придерживается ООП, то есть реализует наследование. Такой класс - есть основой, или же "фундаментом" для его наследников.
В этой статье, я кратко расскажу о создании базовых(родительских) классов, а так же покажу на практике что оно такое, и с чем его есть.

Со временем я начал замечать, что при наследовании суперкласса Activity (а так же, FragmentActivity, Fragment и т.д), каждый мною созданный и унаследованный класс, обзаводиться кучей кода. В следствии чего, размер класса увеличивается. Меня это немножко выводило из себя, зачем каждый раз писать кучу лишнего кода, я люблю минимизацию без потери производительности. Посидев у компьютера вечером и пошарив интернет набрел на пару статей и решил попробовать создать свой базовый класс, и объясню почему, дело в том что с помощью базовых классов мы избавляемся от лишней кучи кода, он стает читабельным, ну и скорее всего это просто интересно.
За основу я брал статью написанную на одном блоге, но я решил немного освежить тему и добавить своих красок.
В общем приступим к написанию кода.

Создадим абстрактный класс BaseActivity, который наследуется от базового класса Activity.
public abstract class BaseActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getLayoutResourceId());

        init();
    }

    protected abstract int getLayoutResourceId();
    protected void init();

}

Мы создали класс, от которого будем наследовать все созданные нами новые Активности(Activity).  Абстрактный метод getLayoutResourceId(), будет возвращать нам ссылку на layout нового Activity.
В методе init(),будем писать остальной код.
Для комфорта можно добавить несколько новых методов, которые возможно вам понадобятся в разработке.
Этот кусок кода дописываем в BaseActivity:

public void toast(String text) {
    Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
}

public Button getButton(int rID) {
    return (Button) findViewById(rID);
}

public EditText getEditText(int rID) {
    return (EditText) findViewById(rID);
}

public TextView getTextView(int rID) {
    return (TextView) findViewById(rID);
}

public void setClicked(int rId, View.OnClickListener listener) {
    View view = findViewById(rID);
    view.setOnClickListener(listener);
}
Так же, если вы хотите выводить логи, а писать что-то вроде такого:
Log.d(“myLogs”,”это будет видно в логах”);
каждый раз нету желания, напишем еще один метод и добавим одну переменную:
private static final String TAG = “myLog”;

public void showLog(String message){
  Log.d(this.TAG,message);
}

Ну вроде все, посмотрим на код, для общей картины:
public abstract class BaseActivity extends Activity {
    private static final String TAG = "myLog";

    @Override
    public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(getLayoutResourceId());

 init();
    }

    protected abstract int getLayoutResourceId();

    protected abstract void init();

    public void toast(String text) {
 Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
    }

    public Button getButton(int rID) {
 return (Button) findViewById(rID);
    }

    public EditText getEditText(int rID) {
 return (EditText) findViewById(rID);
    }

    public TextView getTextView(int rID) {
 return (TextView) findViewById(rID);
    }

    public void setClicked(int rId, View.OnClickListener listener) {
 View view = findViewById(rId);
 view.setOnClickListener(listener);
    }

    public void showLog(String message) {
 Log.d(this.TAG, message);
    }

}

Базовый класс создан, это хорошо, теперь напишем Активность которая будет наследовать его:

public class MainActivity extends BaseActivity {
    TextView tv;

    @Override
    protected int getLayoutResourceId() {
 return R.layout.activity_main;
    }

    @Override
    protected void init() {
 tv = (TextView) findViewById(R.id.tv);
 tv.setText("Это написано с помощою базового компонента");
 showLog("работает!!!");
 toast("работает!!!");
    }
}
Я надеюсь расписал вполне читабельно, кстати начал использовать базовые классы в своем проекте, честно говоря очень удобно. Поэтому если есть желание экспериментировать и пробовать, пожалуйста.

1 комментарий:

  1. Casino, poker, and poker Archives - DrmCD
    July 23, 2013 군산 출장안마 by drmcd. Casino, poker, and poker · July 27, 2013 · Casino, 안동 출장마사지 poker, 파주 출장샵 and poker · July 화성 출장샵 28, 2013 · Casino, poker, and poker · July 29, 2013 · 부산광역 출장마사지 Casino,

    ОтветитьУдалить