设置ID后ImageView消失

Posted

技术标签:

【中文标题】设置ID后ImageView消失【英文标题】:ImageView dissapearing after setting an ID 【发布时间】:2014-02-18 05:20:04 【问题描述】:

我在 for 循环内以编程方式将视图添加到我的布局中。

我添加的布局的xml文件是这样的:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout_consulta_item_list"
    android:layout_
    android:layout_ >
    <ImageView
        android:id="@+id/imageView_consulta_action"
        android:layout_
        android:layout_
        android:layout_alignBottom="@+id/LinearLayout_dados_consulta"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/LinearLayout_dados_consulta"
        android:layout_centerHorizontal="true"
        android:layout_centerInParent="false"
        android:adjustViewBounds="true"
        android:maxWidth="70dp"
        android:padding="10dp"
        android:scaleType="centerInside"
        android:src="@drawable/estrela_off" />
    <LinearLayout
        android:id="@+id/LinearLayout_dados_consulta"
        android:layout_
        android:layout_
        android:layout_margin="2dp"
        android:layout_toLeftOf="@+id/imageView_consulta_action"
        android:background="#660000"
        android:orientation="vertical" >
        <LinearLayout
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:gravity="center" >
            <TextView
                android:id="@+id/textView1"
                android:layout_
                android:layout_
                android:layout_gravity="top"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="5dp"
                android:text="@string/origem"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textColor="#ffaaaa"
                android:textSize="10sp" />
            <TextView
                android:id="@+id/textView_origem"
                android:layout_
                android:layout_
                android:text="YYY"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="#eeeeee" />
            <TextView
                android:id="@+id/textView5"
                android:layout_
                android:layout_
                android:layout_gravity="top"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="5dp"
                android:text="@string/data_ida"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textColor="#ffaaaa"
                android:textSize="10sp" />
            <TextView
                android:id="@+id/textView_data_ida"
                android:layout_
                android:layout_
                android:text="2014-05-05"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="#eeeeee"
                android:textSize="15sp" />
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

在我的 main_activity 中,我调用了构造函数:

for (int i=0;i<resultList.length-1;i++)

    RelativeLayout viewToLoad = (RelativeLayout)LayoutInflater.from(this).inflate(R.layout.consulta_item, null);
                ll.addView(viewToLoad);

    ImageView ImgConsulta_action = (ImageView)findViewById(R.id.imageView_consulta_action);

    LinearLayout dados_consulta = (LinearLayout)findViewById(R.id.LinearLayout_dados_consulta);


    dados_consulta.setOnLongClickListener(...);
    ImgConsulta_action.setOnLongClickListener(...);

好吧,我一直在为布局中的所有视图设置 SetText 等等。

但是,为了使 setOnClickListener 对每个视图都有效,我必须在 for 循环内为视图设置一个 id:

dados_consulta.setId(4000+i);
ImgConsulta_action.setId(5000+i); //(*lastline)

奇怪的事情发生了:

如果我评论最后一行,则布局正确插入,图像视图显示星号,因为它应该这样做,并且“dados_consulta”处的侦听器工作正常。

但如果我删除最后一行的注释,星星就会从屏幕上消失。

谁能帮我理解发生了什么?

【问题讨论】:

您的代码中是否还有其他地方使用此行:ImageView ImgConsulta_action = (ImageView)findViewById(R.id.imageView_consulta_action);?? 请张贴带有导致问题的代码 sn-p 的代码部分。 @Merlevede 不,这是唯一的地方。我调用 ImgConsulta_action 的其他行是设置标记、onClickListener、setImageResource 和 setId。顺便说一句,这是导致问题的代码的和平 @HamidShatu 我确实发布了使图像视图消失的行。 (至少,我相信这是这条线,因为如果我删除它,图像就会出现!)我不明白为什么这个问题不清楚。添加 setOnClickListener 调用打开 AlertDialog 的 void 可能很有用。但我不认为这有什么区别...... 【参考方案1】:

我有一个布局参数引用了原始视图中布局元素的 ID。 由于我必须在多次将此布局添加到我的活动中时动态更改 ID,因此我还需要将 layoutparams 重置为新的 ID。 所以,我添加了以下几行:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)ImgConsulta_action.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_TOP, dados_consulta.getId());
params.addRule(RelativeLayout.ALIGN_BOTTOM, dados_consulta.getId());

ImgConsulta_action.setLayoutParams(params);

RelativeLayout.LayoutParams paramsDadosConsulta = (RelativeLayout.LayoutParams)dados_consulta.getLayoutParams();
paramsDadosConsulta.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
paramsDadosConsulta.addRule(RelativeLayout.LEFT_OF, ImgConsulta_action.getId());

dados_consulta.setLayoutParams(paramsDadosConsulta);

现在它运行良好。

请注意,问题不在于布局消失,而在于布局在另一个布局之前。 (使另一个不可见)

【讨论】:

以上是关于设置ID后ImageView消失的主要内容,如果未能解决你的问题,请参考以下文章

iOS 设置图片imageView圆角——对图片进行裁剪

android的imageview的imageResource,的属性设置好以后怎么获取?

AFNetworking用URL设置UITableViewCell的imageView图片,设置图片后imageview frame还是0

如何动态的设定imageview的大小

XCode 5 ImageView 在 ios 6 中消失

获取 ImageView 中可绘制对象的 ID