单击侦听器问题 [英] On click Listener issue

查看:36
本文介绍了单击侦听器问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在 Android Studio 中开发 Android 应用程序,并使用卡片视图创建了网格布局.如下图所示:

I am working on Android app in Android Studio and I created Grid Layout with Card view. as on image below:

当用户单击网格中的 BMI 元素时,我能够让 onClick 侦听器打开我的 BMIActivity.

I was able to make onClick listener to open my BMIActivity when user click on BMI element in the grid.

这是我的 MainActivity.java 代码:

Here is my Code for MainActivity.java:

    package com.example.metapall;

import androidx.appcompat.app.AppCompatActivity;
import androidx.cardview.widget.CardView;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.GridLayout;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    GridLayout mainGrid;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mainGrid = (GridLayout)findViewById(R.id.mainGrid);
        setSingleEvent(mainGrid);
    }

    private void setSingleEvent(GridLayout mainGrid) {
        for(int i=0;i<mainGrid.getChildCount();i++)
        {
            CardView cardView = (CardView)mainGrid.getChildAt(i);
            final int finalI = i;
            cardView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    openBMIActivity();
                }
            });
        }
    }

    private void openBMIActivity() {
        Intent intent = new Intent(this, BMIActivity.class);
        startActivity(intent);
    }
}

这是我的 mainActivity xml 代码:

And here is my xml code for mainActivity:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/bg"
    android:weightSum="10"
    tools:context=".MainActivity">

    <RelativeLayout
        android:layout_weight="2"
        android:layout_width="match_parent"
        android:layout_height="0dp">

        <TextView
            android:id="@+id/TextGird"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="METAPAL"
            android:textColor="@android:color/white"
            android:layout_centerInParent="true"
            android:textSize="34sp" />

    </RelativeLayout>

    <GridLayout
        android:id="@+id/mainGrid"
        android:columnCount="2"
        android:rowCount="3"
        android:alignmentMode="alignMargins"
        android:columnOrderPreserved="false"
        android:layout_weight="8"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:padding="14dp"
        >
        <!-- Row 1 -->
        <!-- Column 1 -->

        <androidx.cardview.widget.CardView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginBottom="16dp"
            app:cardCornerRadius="8dp"
            app:cardElevation="8dp"
            android:foreground="?android:attr/selectableItemBackground"
            android:clickable="true"

            >

            <LinearLayout
                android:layout_gravity="center_horizontal|center_vertical"
                android:layout_margin="16dp"
                android:orientation="vertical"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <ImageView
                    android:src="@drawable/group"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal" />

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:text="BMI"
                    android:textAlignment="center"
                    android:textColor="@android:color/black"
                    android:textSize="18dp"
                    android:textStyle="bold" />
            </LinearLayout>


        </androidx.cardview.widget.CardView>

        <!-- Column 2 -->
        <androidx.cardview.widget.CardView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginBottom="16dp"
            app:cardCornerRadius="8dp"
            app:cardElevation="8dp"
            android:foreground="?android:attr/selectableItemBackground"
            android:clickable="true"
            >

            <LinearLayout
                android:layout_gravity="center_horizontal|center_vertical"
                android:layout_margin="16dp"
                android:orientation="vertical"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <ImageView
                    android:src="@drawable/notes"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal" />

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:textStyle="bold"
                    android:textSize="18dp"
                    android:textColor="@android:color/black"
                    android:textAlignment="center"
                    android:text="CHO" />
            </LinearLayout>


        </androidx.cardview.widget.CardView>

        <!-- Row 2 -->
        <!-- Column 1 -->

        <androidx.cardview.widget.CardView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginBottom="16dp"
            app:cardCornerRadius="8dp"
            app:cardElevation="8dp"
            android:foreground="?android:attr/selectableItemBackground"
            android:clickable="true"
            >

            <LinearLayout
                android:layout_gravity="center_horizontal|center_vertical"
                android:layout_margin="16dp"
                android:orientation="vertical"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <ImageView
                    android:src="@drawable/piggy"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal" />

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:textStyle="bold"
                    android:textSize="18dp"
                    android:textColor="@android:color/black"
                    android:textAlignment="center"
                    android:text="H20" />
            </LinearLayout>


        </androidx.cardview.widget.CardView>

        <!-- Column 2 -->
        <androidx.cardview.widget.CardView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginBottom="16dp"
            app:cardCornerRadius="8dp"
            app:cardElevation="8dp"
            android:foreground="?android:attr/selectableItemBackground"
            android:clickable="true"
            >

            <LinearLayout
                android:layout_gravity="center_horizontal|center_vertical"
                android:layout_margin="16dp"
                android:orientation="vertical"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <ImageView
                    android:src="@drawable/shopping"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal" />

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:textStyle="bold"
                    android:textSize="18dp"
                    android:textColor="@android:color/black"
                    android:textAlignment="center"
                    android:text="Protein" />
            </LinearLayout>


        </androidx.cardview.widget.CardView>

        <!-- Row 3 -->
        <!-- Column 1 -->

        <androidx.cardview.widget.CardView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginBottom="16dp"
            app:cardCornerRadius="8dp"
            app:cardElevation="8dp"
            android:foreground="?android:attr/selectableItemBackground"
            android:clickable="true"
            >

            <LinearLayout
                android:layout_gravity="center_horizontal|center_vertical"
                android:layout_margin="16dp"
                android:orientation="vertical"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <ImageView
                    android:src="@drawable/calendar"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal" />

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:textStyle="bold"
                    android:textSize="18dp"
                    android:textColor="@android:color/black"
                    android:textAlignment="center"
                    android:text="Calendar" />
            </LinearLayout>


        </androidx.cardview.widget.CardView>

        <!-- Column 2 -->
        <androidx.cardview.widget.CardView
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginBottom="16dp"
            app:cardCornerRadius="8dp"
            app:cardElevation="8dp"
            android:foreground="?android:attr/selectableItemBackground"
            android:clickable="true"
            >

            <LinearLayout
                android:layout_gravity="center_horizontal|center_vertical"
                android:layout_margin="16dp"
                android:orientation="vertical"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <ImageView
                    android:src="@drawable/settings"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal" />

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:textStyle="bold"
                    android:textSize="18dp"
                    android:textColor="@android:color/black"
                    android:textAlignment="center"
                    android:text="Settings" />
            </LinearLayout>


        </androidx.cardview.widget.CardView>

    </GridLayout>


</LinearLayout>

我想弄清楚在单击这些时如何打开 CHOActivity 或 H2OActivity.现在我点击哪个按钮总是打开 BMIActivity,我理解这是我指定的方式.但是,当单击不同的按钮时,如何指定打开正确的活动?我试图使用变量 i 但我不确定如何将它与元素绑定,然后在 onclick 中调用它.有什么建议吗?

I am trying to figure out how do I open CHOActivity or H2OActivity when these are clicked. Right now which ever button i click it opens up always BMIActivity which I understand is the way i specify. But how do I specify to open up correct activity when different button is clicked? I was trying to use variable i but i am not sure how to bind this with element and then call it within onclick. Any suggestion?

推荐答案

你可以做的是通过 xml android:tag="h20" 或通过 java code view.setTag("h20") 同时迭代视图,如果它是动态添加的.为所有人调用相同的单击函数,并将争论作为像 openActivity(View view) 这样的视图.在那个基于标签的开关里面,就像

WHat you can do is to add tags for each of the cards either via xml android:tag="h20" or through java code view.setTag("h20") while iterating over the view if its dynamically added. call the same click function for all with the arguement as view like openActivity(View view). And inside that switch based on tag like

switch(view.getTag){
case "H20:
   doA()
   break;
case "SOMETHING":
   doB()
   break;
}

这篇关于单击侦听器问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆