I want to know if Android support the possibility to make a container with some static components and just include my activities in it.
I have a sliding menu with some onClickListener events and I don't want to set these events for each activity.
4 に答える
私があなたを正しく理解していれば、いくつかのアクティビティに共通するいくつかの機能があり、それらすべてで同じコードを繰り返したくないでしょう。代わりに、1か所でそれを実行したいとします。
これを実現する1つの方法は、スーパークラスアクティビティを作成し、そのアクティビティに共通コードを配置してから、他のアクティビティで拡張することです。例えば、
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;
}
}
すべてのアクティビティはマニフェストに登録する必要があります。スライドメニューなどの一般的なものについては、スライドメニューにフラグメントを使用できます。