【问题标题】:Creating Android UI dynamically in java code在java代码中动态创建Android UI
【发布时间】:2015-03-05 08:11:03
【问题描述】:

场景是Activity A在退出后从Activity B接收输入,处理数据并相应地更新Activity A中的布局C(具有给定的ID,relativelayout)。

这是我的方法:

  1. 在触发函数中,新建一个RelativeLayout
  2. 使用适当的属性更新RelativeLayout,并向其添加视图(按钮和文本视图)
  3. 使用 findR.ID.layout_C_id 检索布局 C
  4. 我卡住了

问题:

  1. 我该如何从这里继续?

  2. RelativeLayout(Context context) 是构造函数。我应该传入什么?

  3. 想过用updateViewLayout(View view, ViewGroup.LayoutParams params),但是好像不行?

【问题讨论】:

  • 没找到你。您到底要更新什么?给我们一个例子。对了,需要在RelativeLayout(Context context)中传递this(Activity上下文)。
  • 我试图在一个活动中更新至少 2 个布局。例如,活动中有 3 个布局。接收并处理输入后,布局 2 和 3 被隐藏,布局 1 的某些属性被更新,其中一个是使布局 2 和 3 再次可见的按钮。
  • 我不认为每次都添加新视图在这里是最佳的。您可以做的是使用 setVisibility() 隐藏布局按钮并更新布局 1 中的视图。例如对于textView.setText()imageView.setImageResource()
  • 谢谢!这正是我在阅读下面的评论后现在想到的。最后一个问题是我应该如何为可绘制资源(在本例中为 theme.xml)设置 ID。我的理解是我需要 ID 才能传入 setBackgroundResource(resid)
  • 把图片放到res文件夹下的drawable文件夹中,名称为residImageView imageView = (ImageView) findViewById(R.id.imageViewId); imageView.setBackgroundResource(R.drawable.resid);

标签: java android android-layout android-ui


【解决方案1】:

我认为你错过了这里的基本点:-(当你想更新一个已经存在的布局时,你不应该膨胀一个新的。相反,你获取你想要更新的视图并将数据放入他们。像这样:

TextView t = myLayout.findViewById(R.id.someTextViewId);
t.setText(newlyObtainedData);

对于 Context,每个 Activity 都会继承它,所以你可以简单地传递 this

【讨论】:

  • 谢谢。这对我来说更有意义了。没有任何借口,但我确实是在一次黑客马拉松比赛中被介绍到 android 的,所以还在小步前进。
  • 没问题。基本上,在 Android 中,您可以对已创建的视图进行操作,如上所示。最好将它们作为字段保留在 Activity 中,仅在 onCreate() 中调用 findViewById()
  • 另外,如果回答对您有帮助,请将其标记为正确。谢谢! :-)
猜你喜欢
  • 1970-01-01
  • 2018-05-29
  • 2017-11-27
  • 2011-12-07
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
  • 2018-08-02
相关资源
最近更新 更多