Используйте контейнер для действий Android

Я хочу знать, поддерживает ли Android возможность создать контейнер с некоторыми статическими компонентами и просто включить в него мои действия.
У меня есть скользящее меню с некоторыми событиями onClickListener, и я не хочу устанавливать эти события для каждого действия. .


person OWZY    schedule 19.02.2013    source источник
comment
Хм, я не уверен, что из этого вопроса вы понимаете, что такое деятельность.   -  person Gabe Sechan    schedule 20.02.2013


Ответы (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 {
  /...
}
person Nazar Merza    schedule 19.02.2013
comment
это не дает никакого эффекта. Я создал свое скользящее меню в BaseActivity, но оно не переключается в HomeActivity (расширяет BaseActivity). - person OWZY; 20.02.2013
comment
Вам нужно опубликовать свой код. В противном случае трудно увидеть, что происходит. - person Nazar Merza; 20.02.2013
comment
теперь все в порядке, мне пришлось прикрепить меню к активности. Спасибо за вашу помощь - person OWZY; 20.02.2013

Я не совсем уверен, что понимаю ваш вопрос, не могли бы вы уточнить еще немного? возможно, даже опубликуйте пример кода, который вы используете в настоящее время.

Из того, что я могу сказать, вы должны быть в состоянии достичь того, чего хотите, создав свою собственную CustomActivity

public class CustomActivity extends Activity {
  //put your slidingmenu stuff here
}

Затем во всех других действиях, где вы хотите использовать эту общую часть, сделайте это следующим образом:

public class AnotherActivity extends CustomActivity {
  //...
}

с extends CustomActivity вместо обычного extends Activity

person FoamyGuy    schedule 19.02.2013
comment
Я уже пробовал, но эффекта нет. Мое скользящее меню — это библиотека, которую я создаю в своей основной деятельности. - person OWZY; 20.02.2013
comment
Вам придется опубликовать свой код. У меня проблемы с пониманием того, чего вы пытаетесь достичь. - person FoamyGuy; 20.02.2013
comment
Я нашел метод, который позволяет прикрепить меню, созданное в базовой активности, к текущей используемой активности (attachToActivity). Спасибо за вашу помощь - person OWZY; 20.02.2013

Вот как я решил проблему:

Первое, что я сделал, это создал свой основной класс, в котором будет размещаться общий код. Например :

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;
    }
}
person OWZY    schedule 19.03.2013
comment
Разве это не то, что предложил @NazarMerza? - person IAbstract; 24.04.2018

Все действия должны быть зарегистрированы в манифесте. Для обычных вещей, например. Слайд-меню, вы можете использовать Fragment для слайд-меню.

person Gaurav Arora    schedule 19.02.2013