设置ID后,ImageView消失

时间:2014-02-18 05:20:05

标签: android layout view imageview onclicklistener

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

我正在添加的布局的xml文件就像这样:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout_consulta_item_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <ImageView
        android:id="@+id/imageView_consulta_action"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        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_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="2dp"
        android:layout_toLeftOf="@+id/imageView_consulta_action"
        android:background="#660000"
        android:orientation="vertical" >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:gravity="center" >
            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                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_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="YYY"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="#eeeeee" />
            <TextView
                android:id="@+id/textView5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                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_width="wrap_content"
                android:layout_height="wrap_content"
                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)

发生的奇怪事情是:

如果我对最后一行进行评论,则会正确插入布局,并且imageview会显示一个星形,因为它正在进行,而“dados_consulta”的监听器工作正常。

但如果我在最后一行删除评论,那么明星将从屏幕上消失。

有人能帮我理解发生了什么吗?

1 个答案:

答案 0 :(得分:0)

我有一个布局参数,参考原始视图中布局元素的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);

现在它完美无缺。

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