1

我正在编写的应用程序中有一些活动,我想在页面上放置一个表单。除了标题和文本不同外,所有活动的形式都相同。

我不是为每个活动重写控件和逻辑,而是在寻找一种方法来创建我自己的控件,我可以使用我自己的属性将它放入我的布局 xml 文件中,所以我需要做的就是编写一次并使用那个控制我需要的地方。

我怎么能做这样的事情?

谢谢

4

3 回答 3

0

取决于您在每个活动中的差异以及您访问它们的方式。

如果只是一些不同的字符串,请将这些字符串放在 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()

于 2014-05-14T13:22:05.983 回答
0

把你的控件写成一个 android Fragment 怎么样?在 xml 中,您可以声明一个 FrameLayout,然后使用 FragmentTransaction 的 replace() 方法将片段插入其中。

于 2014-05-14T13:04:31.500 回答
0

您可以使用扩展的 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");

        }
}

其他建议: 另一个想法是创建一个自定义视图。另请参阅本教程

于 2014-05-14T12:59:28.353 回答