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

Posted

技术标签:

【中文标题】有没有办法区分 TextViews 或具有相同 ID 多次从单个 xml 文件膨胀的任何其他视图【英文标题】:Is there a way to distinguish between TextViews or any other Views having same ID's inflated multiple times from a single xml file 【发布时间】:2012-01-20 13:23:15 【问题描述】:

我希望这次能得到我的问题的答案,我已经发布了一个问题,但我想人们忽略了它,因为它没有正确放置,这是我之前问题的链接How do I know the ID's of views if I am inflating a view multiple times in the same parent on button click? 我正在膨胀child.xml,其中包含一个带有3个LinearLayouts的TableLayout,在我的主Activity中再次包含TextView的按钮单击事件,用户可以添加任意数量的视图。

但我对如何从这些文本视图或 setOnClickListeners 收集数据感到困惑,因为不同的视图共享 TextView 的相同 ID。

人们建议我在膨胀视图上使用 findViewById,方法是在膨胀视图上附加适当的类型并将引用存储在列表中,但我只能为膨胀的第一个视图设置 OnClickListener。

我想知道是否有可能实现我正在做的事情?在另一篇文章中,我读到 findViewById 找到了它可以找到的第一个可能的视图实例。这对我来说是个问题吗。

请看一下我的代码sn-p

TextView[] tv=new TextView[l.size()]; 
for(int i=0;i<tv.length;i++) 
tv[i]=(TextView)l.get(i).findViewById(R.id.mdsnew_type_sp); 
tv[i].setOnClickListener(new View.OnClickListener()  
@Override 
public void onClick(View v)  
showDialog(DATE_DIALOG_ID);  
);
 //I have also tried this
 public void getData() 
 for(int i=0;i<l.size();i++) 
 tv1=(TextView)l.get(i).findViewById(R.id.mdsnew_type_sp);
  

但我只能为第一个 TextView 设置 OnClick 侦听器,其余的都被忽略。

这里是另一个链接,解释了我如何夸大我的活动和类似的场景,但那里没有解释获取信息Inflating a view multiple times in the same parent when a button is clicked

任何帮助都会得到回报,在此先感谢。

【问题讨论】:

【参考方案1】:

由于这些TextViews 已添加到父ViewGroup(在您的情况下为LinearLayout),您可以遍历父视图的子视图列表,并为每个视图添加OnClickListener

for (int childPos = 0; childPos < myLayout.getChildCount(); childPos++) 
    myLayout.getChildAt(childPos).setOnClickListener(new OnClickListener() 
        @Override 
        public void onClick(View v)  
            // ...
        
    );

【讨论】:

如果我这样做了,那么我可以只编辑一次 TextViews,如果我尝试回到特定的 textview 并尝试在其上设置文本,那么文本设置在 LinearLayout 的最后一个 TextView 上?猜猜我现在该怎么办?【参考方案2】:

这可能会有所帮助

LanearLayout parentLayout = (LinearLayout)findViewById(R.id.main_ll);
 int count = parentLayout.getChildCount();
        for (int i = 0; i < count; i++)
     
        View view = mainLl.getChildAt(i);
        if (view instanceof TextView) 
            
              int id=view.getId();
            ((TextView) view).setText(" ");

            
    

【讨论】:

以上是关于有没有办法区分 TextViews 或具有相同 ID 多次从单个 xml 文件膨胀的任何其他视图的主要内容,如果未能解决你的问题,请参考以下文章

如何将滤色器应用于具有所有子项的视图

关闭具有多个文本字段的第一响应者/键盘

区分两种风景模式

为啥当我遇到真实设备或模拟器时没有显示此 TextViews

有没有办法检测一次性电子邮件地址(DEA)服务器?

尺寸等级和 Plus 电话