【问题标题】:Click option not working for images,When XML code is included using <include> command单击选项不适用于图像,当使用 <include> 命令包含 XML 代码时
【发布时间】:2019-02-06 02:41:55
【问题描述】:

这是一个图像的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代码根本不在后台运行。

【问题讨论】:

  • 不要在HorizontalScrollView 中添加相同的布局,为什么不使用RecyclerView
  • 这可能是因为现在您的布局中有多个 ID 为 book_cover51 的 ImageView(准确地说是 9)
  • 我是 android 新手,我没有考虑过。而且这个水平滚动不是主activity,而是我用include在主activity中多次添加了水平视图
  • 请填写您的 XML 文件名
  • 你能粘贴book_covers.xml layout文件的整个xml吗

标签: java android


【解决方案1】:

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

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

【讨论】:

  • 不工作。我已经为我使用的每个包含提供了 id。但问题依然存在
  • 行得通。当然,您需要使用此类 id 来检索您的布局。尝试仅包含 2 个图像,找到具有 2 个不同 id 的 2 个视图,设置 2 个单击侦听器并输出/调试结果。
【解决方案2】:

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

关注这些网址:

RecyclerView Example

Show RecyclerView Horizontally

Official Documentation of RecyclerView

【讨论】:

  • 问题在于点击选项不起作用。而且我还在卡片视图中包含了相同的图像,但遇到了同样的问题。
  • 如果我错了,请纠正我,您正在使用两个 XML,第一个显示所有 imageView,第二个显示所有 imageView,请您显示您的布局文件的名称
  • 不。只有一个图像视图。我正在使用 将它添加到我需要的任何地方。
  • 包含 book_covers.xml 的布局文件名是什么?
【解决方案3】:

您只提到了一个 id ref。对于布局中的多个视图,这有意义吗?

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

android 会混淆你想要在哪个视图中执行 setOnclickListner。我会建议为所有这些保留单独的 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"/> .... 

【讨论】:

    【解决方案4】:

    得到了答案。包含将不包括 java 文件,而只是 XML 代码。所以我在主要活动中编写了代码,而不是在不同的类中。然后就成功了。

    感谢大家的支持和建议。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多