将标签和侦听器添加到多次膨胀的 XML 的视图中

Posted

技术标签:

【中文标题】将标签和侦听器添加到多次膨胀的 XML 的视图中【英文标题】:Adding tags and listeners to the views of a multiple times inflated XML 【发布时间】:2013-09-12 00:13:11 【问题描述】:

我实际上正在开发一个需要多次扩展相同 XML 布局的 android 应用程序。

这个布局包含 2 个按钮、一些 textView 和一个我稍后需要更新的进度条。我想为按钮添加 onClick 侦听器,并为所有这些元素设置带有setTag() 的自定义标签,这样我就能够知道哪个按钮被点击并修改正确的 textView(或progressBar)。

我用这段代码扩充了 XML:

LinearLayout countersList = (LinearLayout)findViewById(R.id.countersLayout);
View child = getLayoutInflater().inflate(R.layout.counter, null);
countersList.addView(child);

如何访问正确的视图来设置标签和添加监听器?有没有更好的方法来做我想做的事?

非常感谢!

【问题讨论】:

【参考方案1】:

至于如何标记或添加 onClick 侦听器到您的视图:您可以向要标记的视图添加一个 ID,并使用 findViewById 找到它们。例如,

LinearLayout countersList = (LinearLayout)findViewById(R.id.countersLayout);
ViewGroup child = (ViewGroup) getLayoutInflater().inflate(R.layout.counter, null);
child.findViewById(R.id.myButton).setTag("myTagForTheButton");
countersList.addView(child);

关于第二个问题,我不确定您的 UI 是什么样的,但许多重复视图可能需要使用 ListView。

【讨论】:

【参考方案2】:

设置标签和监听器没有问题

LinearLayout countersList = (LinearLayout)findViewById(R.id.countersLayout);
View child = getLayoutInflater().inflate(R.layout.counter, null);
child.setTag("YourString");
// Similarly
view.setOnClickListener(new OnClickListener()
        
            @Override
            public void onClick(View v)
            
            
        );
countersList.addView(child);

如果你想要它的某些子节点,你也可以使用findViewById

【讨论】:

【参考方案3】:

您可以使用 view.setTag(key, tag) 到许多标签。 前任: view.setTag("right_view", rightView);

【讨论】:

以上是关于将标签和侦听器添加到多次膨胀的 XML 的视图中的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法区分 TextViews 或具有相同 ID 多次从单个 xml 文件膨胀的任何其他视图

我可以在不膨胀/重新膨胀布局的情况下将视图添加到滚动视图吗?

手动膨胀视图上的 layout()

无法在 Android 中的 XML 中设置膨胀视图的布局宽度、高度和重量

如何动态地将按钮添加到视图以使布局宽度正常工作?

确保不会多次添加相同的事件侦听器