android 내 자신의 활동을 만들고 확장하는 방법은 무엇입니까?
Activity
내 응용 프로그램에서 몇 가지 일반적인 작업을 수행하고 내 활동 을 다음 형식으로 확장하는 기본 클래스를 만들어야합니다 .
public BaseActivity는 Activity {....}를 확장합니다.
public SubActivity는 BaseActivity {...}를 확장합니다.
에서 하위 활동 에서 정의 된 일부 변수 및 UI 구성 요소에 대한 값을 얻었다 I 필요 BaseActivity를 , I는 해당하는 다른 레이아웃을 정의 할 필요가있다 하위 활동 (또한, 몇몇 플래그 값에 따라 하위 활동 I에 정의되어 AsyncTask를 실행할) BaseActivity를 .
이것이 가능한가? 그렇다면 도움이 될만한 튜토리얼이 있습니까? 미리 감사드립니다
정확히 무엇을 달성하려고합니까? 일부 변수 또는 레이아웃의 일부를 제외하고 공통 UI로 두 가지 다른 활동이 있습니까?
이 경우 기본 추상 활동과 두 개의 구체적인 상속 된 하위 클래스를 갖는 것이 좋습니다. 기본 활동에서 모든 공통 동작을 정의하고 차이점에 대한 추상 메서드를 가지고 있으며 실제 구현에서 재정의합니다.
예를 들어 레이아웃 리소스가 다른 두 활동의 경우 :
public abstract class BaseActivity extends Activity {
@Override
public void onCreate(bundle) {
super.onCreate(bundle);
setContentView(getLayoutResourceId());
}
protected abstract int getLayoutResourceId();
}
public class Activity1 extends BaseActivity {
@Override
public void onCreate(bundle) {
super.onCreate(bundle);
// do extra stuff on your resources, using findViewById on your layout_for_activity1
}
@Override
protected int getLayoutResourceId() {
return R.layout.layout_for_activity1;
}
}
서브 클래스에 특정한 모든 비트에 대해 더 많은 추상 메서드를 가질 수 있습니다.
그렇게하는 것은 구체적인 수퍼 클래스에 대한 구체적인 하위 클래스를 갖는 것보다 훨씬 낫다고 생각합니다. 이것은 많은 문제를 일으킬 수 있으며 일반적으로 디버그하기 어렵습니다.
이 질문에는 이미 아주 좋은 답변이 있습니다.
하나. 제 대답은 몇 가지 실제 사례를 찾고있는 사람들을위한 것입니다.
다음은 전체 작동-> 코드입니다.
여기서는 새로운 작업을 수행하지 않습니다. 다른 상속 시나리오와 같습니다 (여러 곳에서 일반적인 동작을 원하지만 해당 동작을 한 번만 작성하려고합니다).
장점 : 더 나은 코드 가독성, 유지 관리 및 어쩌구 저쩌구를 제공합니다. 그러나 이러한 가능성을 추구하는 것은 아닙니다. 뇌가 가젤처럼 작동한다면 그들은 당신에게 중요하지 않을 것입니다.
우리는 "CONTROL" 상속의 진정한 힘을 추구 합니다. (그것도 실생활에서 일어나는 일입니다. 부모 통제 자녀 :)).
In my example, I have two Activities MainActivity and OtherActivity. Both Activities has a different layout but I want both of them to start with some animation or some welcome message.
Our first task is to find out the common behavior. here -> Start Activity with animation.
We have found the common “thing”, now we will write that behavior in BaseClass (AnimationActivity).
MainActivity and OtherActivity will inherit AnimationActivity.
So the code would look like `
BaseActivity
AnimationActivity {
startAnimation()
{
....
}
}
Child Activities
MainActivity extends AnimationActivity{
}
OtherActivity extends AnimationActivity{
}
This design approach provides a lot of Control and Flexibility (POWER OF MODIFIER).
1) CONTROL: Keep animation method inside onCreate() When you decide that Activities should be started with Animation. Keep your method inside onCreate(Bundle bundle) method. Now just by changing the modifier, you can control the child Activities.
If you keep modifier as
final: Child activities will start with parent Animation.
abstract: Child activities will have to give their own animation.
no modifier: Child activities can have their own animation by overriding animation method, Otherwise the child will have parent animation.
2)Flexibility: Don't keep animation method inside onCreate() You can provide child activities flexibility by not keeping animation method inside onCreate(Bundle bundle). Now activities can have the flexibility to have parent Animation or their own animation or no animation at all.
Hope it helps.
Happy learning.
`
Yes you can, you should just keep in mind the basic inheritance rules. You will inherit the inner AsyncTask activity and the properties defined in the BaseActivity if you make them protected instead of private. From what I see now I think you should make BaseActivity an abstract class, as only instances of subActivities will be really used.
You should just start and try it, it'll come and work easier than you think. If you stumble upon any problems, just ask.
@Guillaume의 솔루션에 대한 더 쉬운 방법을 찾았습니다. 설정 ContentView
하여 한 번만 BaseActivity
하고 확장 활동에 설정하지 않는다 :
public abstract class BaseActivity extends Activity {
@Override
public void onCreate(bundle) {
super.onCreate(bundle);
setContentView(activity_main);
}
}
public class Activity1 extends BaseActivity {
@Override
public void onCreate(bundle) {
super.onCreate(bundle);
// setContentView(activity_activity1) // Do NOT call this.
}
}
참고 URL : https://stackoverflow.com/questions/8821240/android-how-to-create-my-own-activity-and-extend-it
'Programing' 카테고리의 다른 글
R에서 참조로 전달할 수 있습니까? (0) | 2020.11.14 |
---|---|
: has_many : through 연관에 조인이있는 범위 (0) | 2020.11.14 |
직접 실행 창에서 동적으로 인해 'Microsoft.CSharp.RuntimeBinder.Binder'가 정의되지 않았거나 가져온 오류가 발생합니다. (0) | 2020.11.14 |
std :: flush는 어떻게 작동합니까? (0) | 2020.11.14 |
스크립트가로드 된 후 자바 스크립트 함수 호출 (0) | 2020.11.14 |