动态创建活动

Jos*_*sef 7 android

我现在在app上工作,我想做以下事情:

  1. 用户创建一个新页面(新活动和xml布局).
  2. 将用户的页面保存到数据库.
  3. 将页面添加到ListView作为项目,并在用户时启动它

将在ListView上单击它.

我在这里看到很多关于"动态创建活动"的答案,我理解这是不可能的,所以我不知道该怎么做.

用户可以创建的页面数量是无限的,因此必须动态完成.ListView中每个页面的布局都是相同的.

非常感谢你!!!

Gil*_*mov 10

实际上,没有办法动态创建新活动.

您可以创建同一活动的多个实例.这需要将您的活动的launchMode设置为"standard"或"singleTop".

此外,您可以使用初始化标志让每个实例使用自己的特定布局,从而创建与多个活动完全相同的用户体验:

Intent intent = new Intent(this, MyDynamicActivity.class);
Bundle b = new Bundle();
b.putInt("LayoutIndex", mode);
intent.putExtras(b);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

活动:

class MyDynamicActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState)  {
         super.onCreate(savedInstanceState);

         Bundle b = getIntent().getExtras();
         int layoutIndex = b.getInt("LayoutIndex");
         // and here populate the activity differently based on layoutIndex value
    }

}
Run Code Online (Sandbox Code Playgroud)

但是,如何动态填充活动的不同实例?

嗯,没有简单的方法.例如,您无法创建ad-hoc XML布局文件并将其存储在文件系统中,因为必须以特定格式编译XML布局才能由Android加载.

您唯一能做的就是从您的Java代码中按照用户设置的规则动态设置布局小部件.下面是Java布局生成代码的示例:

LinearLayout layout = new LinearLayout(this);
layout.setGravity(Gravity.CENTER);

LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
Button button = new Button(this);
button.setText("My Button");
layout.addView(button, params); 

setContentView(layout);
Run Code Online (Sandbox Code Playgroud)

毫无疑问,创建这样一个动态机制将会有很多工作.