Android:编辑以编程方式添加的视图
Posted
技术标签:
【中文标题】Android:编辑以编程方式添加的视图【英文标题】:Android: Edit views added programmatically 【发布时间】:2020-02-06 03:10:48 【问题描述】:所以我有一个消息应用程序,我可以在其中读取我的数据库并以编程方式呈现所有消息。问题是,当我在不同的布局中时,我需要放大这些消息并随意编辑它们。例如,
val myView = inflater.inflate(R.layout.female_messaging_fragment, container, false)
...
val convLayout = myView.findViewById<LinearLayout>(R.id.conversations_layout)
val profileLayout = LinearLayout(context)
val recentMessage = TextView(context)
recentMessage.id = 5
val recentParams = LinearLayout.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT)
recentParams.setMargins(10, 0, 0, 0)
recentMessage.layoutParams = recentParams
recentMessage.textSize = 16f
if (didIsendLastMessage)
val arrowIcon = ImageView(context)
Picasso.get().load(R.drawable.right_arrow).resize(50, 50).into(arrowIcon)
val imageParams = LinearLayout.LayoutParams(ActionBar.LayoutParams.WRAP_CONTENT, ActionBar.LayoutParams.WRAP_CONTENT)
imageParams.gravity = Gravity.CENTER
arrowIcon.layoutParams = imageParams
recentMessage.setText(mostRecentMessage)
arrowAndMessageLayout.addView(arrowIcon)
arrowAndMessageLayout.addView(recentMessage)
else
recentMessage.setText(mostRecentMessage)
arrowAndMessageLayout.addView(recentMessage)
nameLastmessageLayout.addView(arrowAndMessageLayout)
// Add namne and message to profile
profileLayout.addView(nameLastmessageLayout)
convLayout.addView(profileLayout)
然后在不同的布局中......
LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.female_messaging_fragment, null);
TextView text = (TextView) v.findViewById(5);
text.setText("Something");
问题是,文本始终为空,我相信这是因为我以编程方式添加了视图。我还能在这里做什么?谢谢!
【问题讨论】:
展示您如何以编程方式添加视图。现在看起来你没有添加它们。 @RyanMentley 已添加,我之前应该这样做过。谢谢。 【参考方案1】:inflating female_messaging_fragment
将返回新的 xml 布局视图对象,它可能是没有任何 TextViews 的空白布局。
要获取 TextView 对象,您需要添加视图的 Layout 对象。
例如,根据您的代码,您在arrowAndMessageLayout
中添加了recentMessage
,因此要获取recentMessage
的对象,您需要arrowAndMessageLayout
的对象,并且可以如下所示 -
TextView text = arrowAndMessageLayout.findViewById(5);
或
TextView text = convLayout.findViewById(5);
再次充气将返回没有您的文本视图的全新容器。
希望这会对您有所帮助。
【讨论】:
感谢您的回答。当我不在同一个班级/布局中时,如何获取文本?由于 convLayout 和 arrowAndMessageLayout 不是 R.layouts 内部的布局,我不知道如何获取它们。谢谢。 你可以在你膨胀myView的那个类中使用接口和实现,并从你想要获取convLayout或arrowAndMessageLayout对象的类中调用。您可以将 convLayout 声明为 Instance 变量。 再次感谢伙计哈哈,还有一个问题。如果我不能实现/扩展类怎么办?例如,它是一个片段,所以它必须自己实现 Fragment(),所以它不能是一个接口。再次感谢! 你能分享一下你膨胀 myView 的类和你想要获取 Textview 对象的类吗? @DipankarBaghel 我有一些疑问如何联系你?以上是关于Android:编辑以编程方式添加的视图的主要内容,如果未能解决你的问题,请参考以下文章
Android:LinearLayout addView 动画