我正在编写的应用程序中有一些活动,我想在页面上放置一个表单。除了标题和文本不同外,所有活动的形式都相同。
我不是为每个活动重写控件和逻辑,而是在寻找一种方法来创建我自己的控件,我可以使用我自己的属性将它放入我的布局 xml 文件中,所以我需要做的就是编写一次并使用那个控制我需要的地方。
我怎么能做这样的事情?
谢谢
我正在编写的应用程序中有一些活动,我想在页面上放置一个表单。除了标题和文本不同外,所有活动的形式都相同。
我不是为每个活动重写控件和逻辑,而是在寻找一种方法来创建我自己的控件,我可以使用我自己的属性将它放入我的布局 xml 文件中,所以我需要做的就是编写一次并使用那个控制我需要的地方。
我怎么能做这样的事情?
谢谢
取决于您在每个活动中的差异以及您访问它们的方式。
如果只是一些不同的字符串,请将这些字符串放在 Intent 中,Intent 会启动活动并在 onCreate() 中获取它们。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.lyt_template_form);
((TextView) findViewById(R.id.txt_form_headline)).setText(getIntent().getStringExtra("headline");
((TextView) findViewById(R.id.txt_form_subtitle1)).setText(getIntent().getStringExtra("subtitle1");
//etc...
如果您的控制代码有更多差异,并且您需要区分某种“Form Type A”、“Form Type B”等,您可以在 Intent 中放置一个指示器并检查以在您的 Intent 中做出不同的决定代码。
所以例如
if (getArguments().getInt("Type") == 0) {
// do stuff in control like this
} else if (getArguments().getInt("Type") == 1) {
// do stuff in control like this
// etc.
getArgument()
相当于getIntent().getXyzExtra()
把你的控件写成一个 android Fragment 怎么样?在 xml 中,您可以声明一个 FrameLayout,然后使用 FragmentTransaction 的 replace() 方法将片段插入其中。
您可以使用扩展的 Activity 并将其android.app.Activity
定义为通用逻辑。然后您的所有其他活动将扩展它而不是扩展android.app.Activity
。然后他们将继承它,您也可以覆盖您想要覆盖的内容。如果您具有完全相同的布局并且只有一些差异,则此解决方案还不错,您可以layout.xml
仅加载一次,然后根据需要在子类中使用它。
超类:
public SuperClass extends Activity{
protected TextView myTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
myTextView = (TextView) findViewById(R.id.my_text_view);
}
}
子类A:
public ChildClassA extends SuperClass {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
myTextView.setText("I am in A");
}
}
子类B:
public ChildClassB extends SuperClass {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
myTextView.setText("I am in B");
}
}