Я хочу знать, поддерживает ли Android возможность создать контейнер с некоторыми статическими компонентами и просто включить в него мои действия.
У меня есть скользящее меню с некоторыми событиями onClickListener, и я не хочу устанавливать эти события для каждого действия. .
Используйте контейнер для действий Android
Ответы (4)
Если я вас правильно понял, у вас есть некоторая функциональность, общая для нескольких Activity, и вы не хотите повторять один и тот же код во всех них. Вместо этого вы хотите сделать это в одном месте.
Один из способов добиться этого — создать действие суперкласса, поместить в него свой общий код, а затем расширить его другими действиями. Например,
public class BaseActivity extends Activity implements OnClickListener {
private Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button) findViewById(R.id.my_button);
button.setOnClickListener(this);
}
...
@Override
public void onClick(View view) {
int id = view.getId();
switch(id) {
case R.id.my_button:
// perform action
break;
}
}
}
Затем вы расширяете его как
public class Activity1 extends BaseActivity {
/...
}
public class Activity2 extends BaseActivity {
/...
}
public class Activity3 extends BaseActivity {
/...
}
Я не совсем уверен, что понимаю ваш вопрос, не могли бы вы уточнить еще немного? возможно, даже опубликуйте пример кода, который вы используете в настоящее время.
Из того, что я могу сказать, вы должны быть в состоянии достичь того, чего хотите, создав свою собственную CustomActivity
public class CustomActivity extends Activity {
//put your slidingmenu stuff here
}
Затем во всех других действиях, где вы хотите использовать эту общую часть, сделайте это следующим образом:
public class AnotherActivity extends CustomActivity {
//...
}
с extends CustomActivity
вместо обычного extends Activity
Вот как я решил проблему:
Первое, что я сделал, это создал свой основной класс, в котором будет размещаться общий код. Например :
public abstract class main extends activity(){
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutResourceId());
// Your common code here
}
protected abstract int getLayoutResourceId();
}
Тогда все, что вам нужно, это расширить этот класс в своей деятельности:
public class HelloActivity extends main{
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_hello);
super.onCreate(savedInstanceState);
//make sure to put setcontentview before super.oncreate
}
@Override
protected int getLayoutResourceId() {
return R.layout.activity_hello;
}
}
Все действия должны быть зарегистрированы в манифесте. Для обычных вещей, например. Слайд-меню, вы можете использовать Fragment для слайд-меню.