单击选项对图像不起作用,当使用命令包含 XML 代码时<include>



这是一个图像的java代码

package com.example.ananduamenon.kindel3;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
public class ToReader extends Activity {
ImageView imageView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
setContentView( R.layout.book_covers );
imageView = (ImageView) findViewById( R.id.book_cover51 );
imageView.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent( ToReader.this, com.example.ananduamenon.kindel3.Reader.class );
startActivity( intent );
}
} );
}
}

此活动的 XML 代码为

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/book_cover51"
android:layout_width="100dp"
android:layout_height="160dp"
android:layout_margin="5dp"
android:contentDescription="@string/todo"
android:scaleType="fitXY"
android:src="@drawable/book_cover"
tools:ignore="RtlHardcoded,RtlSymmetry"
tools:context=".ToReader"/>

当ToReader代码作为MAIN运行时,此代码有效

但是当我将此 XML 代码包含在主活动中时,它不起作用。

<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView
android:id="@+id/horizontal_scrolls"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<include layout="@layout/book_covers"/>
<include layout="@layout/book_covers"/>
<include layout="@layout/book_covers"/>
<include layout="@layout/book_covers"/>
<include layout="@layout/book_covers"/>
<include layout="@layout/book_covers"/>
<include layout="@layout/book_covers"/>
<include layout="@layout/book_covers"/>
<include layout="@layout/book_covers"/>
</LinearLayout>
</HorizontalScrollView>

单击选项现在不起作用。使用选项添加时添加XML代码时是否有任何要求。Java 代码根本不在后台运行。

当你使用包含时,基本上你告诉你包含的布局是一个模板,然后你会有多个实例。因此,模板不能有 id,您应该为它的实例使用不同的 id,并从运行时代码引用它们。有更好的方法可以实现此目的,但这就是您的实际代码不起作用的原因:

<include android:id="@+id/myId1"
layout="@layout/book_covers"/>
<include android:id="@+id/myId2"
layout="@layout/book_covers"/>

如果你的应用需要显示基于大型数据集(或经常更改的数据(的元素滚动列表。 您可以在回收器中水平或垂直显示多个项目视图。

关注以下网址:

回收商查看示例

显示回收器水平视图

回收器视图的官方文档

您只提到了布局中多个视图的一个 id ref. 它有意义吗?

imageView = (ImageView) findViewById( R.id.book_cover51 );

android 会混淆你想在哪个视图集上点击列表器。我建议为所有这些保留单独的id

<include layout="@layout/book_covers"/>
<include layout="@layout/book_covers"/>
<include layout="@layout/book_covers"/>
<include layout="@layout/book_covers"/>
<include layout="@layout/book_covers"/>
<include layout="@layout/book_covers"/>
<include layout="@layout/book_covers"/>
<include layout="@layout/book_covers"/>
<include layout="@layout/book_covers"/> 

喜欢这样

<include layout="@layout/book_covers" 
android:id="@+id/book_cover1"/> 
<include layout="@layout/book_covers" 
android:id="@+id/book_cover2"/> .... 

得到了答案。包含不会包含 java 文件,而只包含 XML 代码。所以我在主活动中编写了代码,而不是在不同的类中编写。然后它奏效了。

大家感谢您的支持和建议。

最新更新