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 平滑滚动到底部

Android添加边框以编程方式编辑文本

Android:LinearLayout addView 动画

以编程方式将视图添加到 Xamarin.Android C# 中的 GridLayout

android - 获取以编程方式创建的视图的估计高度

以编程方式在 ScrollView 中添加视图