onItemClick不工作的卡片视图 [英] onItemClick not working for Card View

查看:214
本文介绍了onItemClick不工作的卡片视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

它采用2.0改造从Web服务获取数据,并将其绑定到卡片视图。当我点击具有图像和textviews卡视图中,点击没有触发,而是一个奇怪的现象是在卡片视图的onclick是触发的最角落边。

Item_row.xml

 <?XML版本=1.0编码=UTF-8&GT?;
< android.support.v7.widget.CardView的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:card_view =htt​​p://schemas.android.com/apk/res-auto
    机器人:layout_width =match_parent
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_margin =8DP
    card_view:cardCornerRadius =1DP>    < RelativeLayout的        机器人:layout_width =match_parent
        机器人:layout_height =match_parent
        机器人:填充=8DP
        机器人:layout_margin =5DP
        机器人:可点击=真正的>        < ImageView的
            机器人:ID =@ + ID / flowerImage
            机器人:layout_width =match_parent
            机器人:layout_height =200dp
            机器人:可聚焦=真
            机器人:可点击=真
            机器人:layout_alignParentLeft =真
            机器人:layout_alignParentStart =真
            机器人:layout_alignParentTop =真
            机器人:知名度=看得见/>
        <的ImageButton
            机器人:ID =@ + ID /图标
            机器人:layout_width =32dp
            机器人:layout_height =32dp
            机器人:scaleType =fitXY
            机器人:layout_margin =5DP
            机器人:layout_alignParentRight =真
            机器人:layout_alignParentTop =真
            机器人:descendantFocusability =blocksDescendants
            机器人:背景=@绘制/ ic_favorite_border
            机器人:可聚焦=真
            机器人:可点击=真
            />        <的LinearLayout            机器人:layout_width =match_parent
            机器人:layout_height =match_parent
            机器人:layout_below =@ + ID / flowerImage            机器人:方向=垂直
            >            <的TextView
                机器人:ID =@ + ID / flowerName
                机器人:layout_width =WRAP_CONTENT
                机器人:layout_height =WRAP_CONTENT
                机器人:文字=中文字
                机器人:文字颜色=@彩色/ colorPrimary
                机器人:textAppearance =机器人:ATTR / textAppearanceMedium
                机器人:可聚焦=真
                机器人:可点击=真
                机器人:知名度=看得见/>            <的TextView
                机器人:ID =@ + ID / flowerCategory
                机器人:layout_width =WRAP_CONTENT
                机器人:layout_height =WRAP_CONTENT
                机器人:文字=小文本
                机器人:layout_alignBottom =@ ID / flowerName
                机器人:textAppearance =机器人:ATTR / textAppearanceSmall
                机器人:可聚焦=真
                机器人:可点击=真
                机器人:知名度=看得见/>            <的TextView
                机器人:ID =@ + ID / flowerPrice
                机器人:layout_width =WRAP_CONTENT
                机器人:layout_height =WRAP_CONTENT
                机器人:layout_alignBottom =@ ID / flowerCategory
                机器人:文字=新文本
                机器人:可聚焦=真
                机器人:可点击=真
                机器人:知名度=看得见/>            <的TextView
                机器人:ID =@ + ID / flowerInstruction
                机器人:layout_width =WRAP_CONTENT
                机器人:layout_height =WRAP_CONTENT
                机器人:知名度=水涨船高
                机器人:文字=新文本
                机器人:可聚焦=真
                机器人:可点击=真/>        < / LinearLayout中>
    < / RelativeLayout的>
< /android.support.v7.widget.CardView>

Content_main.xml
布局文件

 <?XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:方向=垂直
    机器人:layout_margin =8DP
    工具:上下文=MainActivity。>    < RelativeLayout的
        机器人:layout_width =match_parent
        机器人:layout_height =match_parent>        < android.support.v4.widget.SwipeRefreshLayout
            机器人:ID =@ + ID /刷卡
            机器人:layout_width =match_parent
            机器人:layout_height =match_parent>            < android.support.v7.widget.RecyclerView
                机器人:ID =@ + ID /列表
                机器人:layout_width =match_parent
                机器人:layout_height =WRAP_CONTENT
                机器人:滚动条=垂直/>
        < /android.support.v4.widget.SwipeRefreshLayout>
< / RelativeLayout的>< / LinearLayout中>

主要活动版式文件
    activity_main.xml中

 <?XML版本=1.0编码=UTF-8&GT?;
< android.support.design.widget.CoordinatorLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:程序=htt​​p://schemas.android.com/apk/res-auto
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:layout_width =match_parent
    机器人:layout_height =match_parent
    机器人:fitsSystemWindows =真
    工具:上下文=MainActivity。>    < android.support.design.widget.AppBarLayout
        机器人:layout_width =match_parent
        机器人:layout_height =WRAP_CONTENT
        机器人:主题=@风格/ AppTheme.AppBarOverlay>        < android.support.v7.widget.Toolbar
            机器人:ID =@ + ID /工具栏
            机器人:layout_width =match_parent
            机器人:layout_height =?ATTR / actionBarSize
            机器人:ATTR / colorPrimary背景=
            应用:popupTheme =@风格/ AppTheme.PopupOverlay
            机器人:海拔=8DP/>    < /android.support.design.widget.AppBarLayout>    <包括布局=@布局/ content_main/>    < android.support.design.widget.FloatingActionButton
        机器人:ID =@ + ID / FAB
        机器人:layout_width =WRAP_CONTENT
        机器人:layout_height =WRAP_CONTENT
        机器人:layout_gravity =底部|结束
        机器人:layout_margin =@扪/ fab_margin
        机器人:SRC =@机器人:可绘制/ ic_dialog_email/>< /android.support.design.widget.CoordinatorLayout>

在code基是继MVC设计模式。控制器确实获得web服务的数据的工作

  MainActivity.java包com.innovation.myapp.jwelleryonrent.View;进口android.graphics.drawable.Drawable;
进口android.os.Bundle;
进口android.support.design.widget.FloatingActionButton;
进口android.support.design.widget.Snackbar;
进口android.support.v4.widget.SwipeRefreshLayout;
进口android.support.v7.app.AppCompatActivity;
进口android.support.v7.widget.LinearLayoutManager;
进口android.support.v7.widget.RecyclerView;
进口android.support.v7.widget.Toolbar;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.Menu;
进口android.view.MenuItem;
进口android.view.ViewGroup;
进口android.widget.Button;
进口android.widget.ImageButton;
进口android.widget.Toast;进口com.innovation.myapp.jwelleryonrent.R;
进口com.innovation.myapp.jwelleryonrent.controller.jwelleryController;
进口com.innovation.myapp.jwelleryonrent.model.adapter.CustomItemClickListner;
进口com.innovation.myapp.jwelleryonrent.model.adapter.JwelleryAdapter;
进口com.innovation.myapp.jwelleryonrent.model.pojo.JwelleryCollection;进口的java.util.ArrayList;
进口的java.util.List;公共类MainActivity扩展AppCompatActivity实现jwelleryController.JwelleryCallbackListener {
    私人工具栏mToolbar;
    私人RecyclerView mRecyclerView;
    私人SwipeRefreshLayout mSwipeRefreshLayout;
    私人列表< JwelleryCollection> mJwelleryList =新的ArrayList<>();
    私人JwelleryAdapter mJwelleryAdapter;
    私人jwelleryController mController;
    私人布尔isInFavourites = FALSE;
    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);
        configToolbar();
        mController =新jwelleryController(MainActivity.this);
        configViews();        FloatingActionButton FAB =(FloatingActionButton)findViewById(R.id.fab);
        fab.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(查看视图){
                Snackbar.make(看来,用自己的行动替换,Snackbar.LENGTH_LONG)
                        .setAction(动作,NULL).show();
            }
        });
    }
    公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
                             捆绑savedInstanceState)
    {
        查看rootView = inflater.inflate(R.layout.item_row,集装箱,FALSE);
        的ImageButton imgBtn =(的ImageButton)findViewById(R.id.favIcon);
        imgBtn.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(视图v){
                addItemToBag(五);
            }
        });
        返回rootView;
    }
    私人无效addItemToBag(视图V)
    {
        isInFavourites = TRUE;
        的ImageButton btnFaviourite =(的ImageButton)findViewById(R.id.favIcon);
        如果(isInFavourites ==真){            btnFaviourite.setImageResource(R.drawable.ic_favorite_white_24dp);
        }
        其他
            btnFaviourite.setImageResource(R.drawable.ic_favorite_border);
        Snackbar.make(V项添加至收藏夹,Snackbar.LENGTH_LONG)
                .setAction(动作,NULL).show();
    }
    私人无效configToolbar(){
        mToolbar =(工具栏)this.findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
    }    私人无效initializeAdapter()
    {
        mJwelleryAdapter =新JwelleryAdapter(mJwelleryList,新CustomItemClickListner(){
            @覆盖
            公共无效onItemClick(视图V,INT位置){
                Toast.makeText(MainActivity.this,单击项目:+位置,Toast.LENGTH_LONG).show();
            }
        });
        mRecyclerView.setAdapter(mJwelleryAdapter);        mSwipeRefreshLayout.setColorSchemeColors(getResources()。的getColor(R.color.colorAccent)
                getResources()。的getColor(R.color.colorPrimary)
                。getResources()的getColor(R.color.colorPrimaryDark));        mSwipeRefreshLayout.setOnRefreshListener(新SwipeRefreshLayout.OnRefreshListener(){
            @覆盖
            公共无效onRefresh(){
                mController.startFetching();
            }
        });
    }
    私人无效configViews(){
        mRecyclerView =(RecyclerView)this.findViewById(R.id.list);
        mSwipeRefreshLayout =(SwipeRefreshLayout)this.findViewById(R.id.swipe);        mRecyclerView.setHasFixedSize(真);
        mRecyclerView.setLayoutManager(新LinearLayoutManager(MainActivity.this));
        mRecyclerView.setRecycledViewPool(新RecyclerView.RecycledViewPool());
        mController.startFetching();
        initializeAdapter();
// mJwelleryAdapter =新JwelleryAdapter(mJwelleryList);    }        @覆盖
    公共布尔onCreateOptionsMenu(菜单菜单){
        //充气菜单;如果是present这增加了项目操作栏。
        。getMenuInflater()膨胀(R.menu.menu_main,菜单);
        返回true;
    }    @覆盖
    公共布尔onOptionsItemSelected(菜单项项){
        //处理动作栏项目点击这里。操作栏会
        //自动处理上点击主页/向上按钮,只要
        //你在AndroidManifest.xml中指定一个父活动。
        INT ID = item.getItemId();        // noinspection SimplifiableIfStatement
        如果(ID == R.id.action_settings){
            返回true;
        }        返回super.onOptionsItemSelected(项目);
    }        @覆盖
        公共无效onFetchStart(){        }        @覆盖
        公共无效onFetchProgress(JwelleryCollection jwellery){
            mJwelleryAdapter.addJwellery(jwellery);
        }        @覆盖
        公共无效onFetchProgress(列表< JwelleryCollection> jwelleryList){        }        @覆盖
        公共无效onFetchComplete(){
            mSwipeRefreshLayout.setRefreshing(假);
        }        @覆盖
        公共无效onFetchFailure(){        }
}

回收站视图使用适配器观点持有者模式初始化适配器
    JwelleryAdapter类

 包com.innovation.myapp.jwelleryonrent.model.adapter;进口android.content.Context;
进口android.support.v7.widget.RecyclerView;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.ImageView;
进口android.widget.TextView;
进口android.widget.Toast;进口com.innovation.myapp.jwelleryonrent.R;
进口com.innovation.myapp.jwelleryonrent.View.MainActivity;
进口com.innovation.myapp.jwelleryonrent.model.pojo.JwelleryCollection;
进口com.innovation.myapp.jwelleryonrent.model.utilities.Constants;
进口com.squareup.picasso.Picasso;进口的java.util.List;/ **
 *
 * /
公共类JwelleryAdapter扩展RecyclerView.Adapter< JwelleryAdapter.Holder> {
    私人列表< JwelleryCollection> mJwelleryCollection;
    CustomItemClickListner itemListner;
    上下文mContext;    公共JwelleryAdapter(列表< JwelleryCollection> jwellery){
        mJwelleryCollection = jwellery;    }
    公共JwelleryAdapter(列表< JwelleryCollection> jwellery,CustomItemClickListner听者){
        mJwelleryCollection = jwellery;
        this.itemListner =听者;    }    @覆盖
    公众持有人onCreateViewHolder(ViewGroup中的父母,INT viewType){
        查看排= LayoutInflater.from(parent.getContext())膨胀(R.layout.item_row,父母,假的)。
        最终持有人mViewHolder =新的持有人(行);
        row.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(视图v){
                itemListner.onItemClick(ⅴ,mViewHolder.getPosition());
            }
        });
        返回mViewHolder;
    }    @覆盖
    公共无效onBindViewHolder(JwelleryAdapter.Holder持有人,INT位置){
        JwelleryCollection currentJwellery = mJwelleryCollection.get(位置);
        holder.mName.setText(currentJwellery.mName);
        holder.mCategory.setText(currentJwellery.mCategory);
        holder.mPrice.setText(Double.toString(currentJwellery.mPrice));
        holder.mInstructions.setText(currentJwellery.mInstructions);        Picasso.with(holder.itemView.getContext())负荷(Constants.PHOTO_URL + currentJwellery.mPhoto).into(holder.mImage)。
    }
    公共无效addJwellery(JwelleryCollection jwellery){
        mJwelleryCollection.add(jwellery);
        notifyDataSetChanged();
    }
    @覆盖
    公众诠释getItemCount(){
        返回mJwelleryCollection.size();
    }
    公共类持有人扩展RecyclerView.ViewHolder实现View.OnClickListener {
        上下文contxt;
        公众的TextView MNAME,mCategory,mPrice,mInstructions;
        公共ImageView的mImage;        公众持有人(查看ItemView控件){
            超(ItemView控件);
            mImage =(ImageView的)itemView.findViewById(R.id.flowerImage);
            MNAME =(TextView中)itemView.findViewById(R.id.flowerName);
            mCategory =(TextView中)itemView.findViewById(R.id.flowerCategory);
            mPrice =(TextView中)itemView.findViewById(R.id.flowerPrice);
            mInstructions =(TextView中)itemView.findViewById(R.id.flowerInstruction);
        }
        公众持有人(查看ItemView控件,INT ViewType,上下文C){
        //使用查看和viewType作为参数创建ViewHolder构造
            超(ItemView控件);
            contxt = C;
            itemView.setClickable(真);
            itemView.setOnClickListener(本);
        }
        @覆盖
        公共无效的onClick(视图v){        Toast.makeText(contxt,单击的项目是:+为getPosition(),Toast.LENGTH_SHORT).show();
            }
        }
}

CustomerItemClickListner界面上点击处理行项目

 包com.innovation.myapp.jwelleryonrent.model.adapter;进口android.view.View;/ **
 *
 * /
公共接口CustomItemClickListner {
    公共无效onItemClick(视图V,INT位置);
}


解决方案

首先在适配器中创建界面的一个变量:

  CustomItemClickListener mListener;

然后像你在你的的OnClick()方法设置:

 如果(mListener!= NULL){
    mListener.onItemClick(ⅴ,getAdapterPosition());
}

,你需要在你的适配器修改的最后一件事是创建新的方法,你会在你的活动类再打处理监听器:

 公共无效setOnItemClickListener(CustomItemClickListener监听){
     mListener =侦听器;
}

现在,你可以调用此方法在您的活动是这样的:

  adapter.setOnItemClickListener(本); //实现接口           // 要么adapter.setOnItemClickListener(新CustomItemClickListener());

It uses retrofit 2.0 to fetch the data from the webservice and bind it to the card view. When I click on the card view having image and textviews, on click is not triggering, rather a strange behaviour is at the very corner edges of the card view onclick is triggering.

Item_row.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="8dp"
    card_view:cardCornerRadius="1dp">

    <RelativeLayout

        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="8dp"
        android:layout_margin="5dp"
        android:clickable="true">

        <ImageView
            android:id="@+id/flowerImage"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:focusable="true"
            android:clickable="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:visibility="visible"/>
        <ImageButton
            android:id="@+id/favIcon"
            android:layout_width="32dp"
            android:layout_height="32dp"
            android:scaleType="fitXY"
            android:layout_margin="5dp"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:descendantFocusability="blocksDescendants"
            android:background="@drawable/ic_favorite_border"
            android:focusable="true"
            android:clickable="true"
            />



        <LinearLayout

            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/flowerImage"

            android:orientation="vertical"
            >

            <TextView
                android:id="@+id/flowerName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Medium Text"
                android:textColor="@color/colorPrimary"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:focusable="true"
                android:clickable="true"
                android:visibility="visible"/>

            <TextView
                android:id="@+id/flowerCategory"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Small Text"
                android:layout_alignBottom="@id/flowerName"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:focusable="true"
                android:clickable="true"
                android:visibility="visible"/>

            <TextView
                android:id="@+id/flowerPrice"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBottom="@id/flowerCategory"
                android:text="New Text"
                android:focusable="true"
                android:clickable="true"
                android:visibility="visible"/>

            <TextView
                android:id="@+id/flowerInstruction"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:visibility="gone"
                android:text="New Text"
                android:focusable="true"
                android:clickable="true"/>

        </LinearLayout>


    </RelativeLayout>


</android.support.v7.widget.CardView>

Content_main.xml Layout file

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_margin="8dp"
    tools:context=".MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/swipe"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/list"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:scrollbars="vertical"/>


        </android.support.v4.widget.SwipeRefreshLayout>


</RelativeLayout>



</LinearLayout>

Main Activity Layout file activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:fitsSystemWindows="true"
    tools:context=".MainActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay"
            android:elevation="8dp"/>

    </android.support.design.widget.AppBarLayout>

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

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_dialog_email" />

</android.support.design.widget.CoordinatorLayout>

The code base is following MVC design pattern. Controller does the job of getting the web service data

MainActivity.java

package com.innovation.myapp.jwelleryonrent.View;

import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;

import com.innovation.myapp.jwelleryonrent.R;
import com.innovation.myapp.jwelleryonrent.controller.jwelleryController;
import com.innovation.myapp.jwelleryonrent.model.adapter.CustomItemClickListner;
import com.innovation.myapp.jwelleryonrent.model.adapter.JwelleryAdapter;
import com.innovation.myapp.jwelleryonrent.model.pojo.JwelleryCollection;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements jwelleryController.JwelleryCallbackListener {
    private Toolbar mToolbar;
    private RecyclerView mRecyclerView;
    private SwipeRefreshLayout mSwipeRefreshLayout;
    private List<JwelleryCollection> mJwelleryList = new ArrayList<>();
    private JwelleryAdapter mJwelleryAdapter;
    private jwelleryController mController;
    private boolean isInFavourites = false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        configToolbar();
        mController = new jwelleryController(MainActivity.this);
        configViews();



        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });




    }


    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState)
    {
        View rootView = inflater.inflate(R.layout.item_row, container, false);
        ImageButton imgBtn = (ImageButton) findViewById(R.id.favIcon);
        imgBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                addItemToBag(v);
            }
        });
        return rootView;
    }


    private void addItemToBag(View v)
    {
        isInFavourites = true;
        ImageButton btnFaviourite = (ImageButton) findViewById(R.id.favIcon);
        if(isInFavourites==true) {

            btnFaviourite.setImageResource(R.drawable.ic_favorite_white_24dp);
        }
        else
            btnFaviourite.setImageResource(R.drawable.ic_favorite_border);
        Snackbar.make(v, "Item added to Favourites", Snackbar.LENGTH_LONG)
                .setAction("Action", null).show();
    }


    private void configToolbar() {
        mToolbar = (Toolbar) this.findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);
    }

    private void initializeAdapter()
    {
        mJwelleryAdapter = new JwelleryAdapter(mJwelleryList, new CustomItemClickListner() {
            @Override
            public void onItemClick(View v, int position) {
                Toast.makeText(MainActivity.this, "Clicked Item: "+position,Toast.LENGTH_LONG).show();
            }
        });
        mRecyclerView.setAdapter(mJwelleryAdapter);

        mSwipeRefreshLayout.setColorSchemeColors(getResources().getColor(R.color.colorAccent),
                getResources().getColor(R.color.colorPrimary),
                getResources().getColor(R.color.colorPrimaryDark));

        mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                mController.startFetching();
            }
        });


    }


    private void configViews() {
        mRecyclerView = (RecyclerView) this.findViewById(R.id.list);
        mSwipeRefreshLayout = (SwipeRefreshLayout) this.findViewById(R.id.swipe);

        mRecyclerView.setHasFixedSize(true);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
        mRecyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool());
        mController.startFetching();
        initializeAdapter();
//        mJwelleryAdapter= new JwelleryAdapter(mJwelleryList);

    }

        @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

        @Override
        public void onFetchStart() {

        }

        @Override
        public void onFetchProgress(JwelleryCollection jwellery) {
            mJwelleryAdapter.addJwellery(jwellery);
        }

        @Override
        public void onFetchProgress(List<JwelleryCollection> jwelleryList) {

        }

        @Override
        public void onFetchComplete() {
            mSwipeRefreshLayout.setRefreshing(false);
        }

        @Override
        public void onFetchFailure() {

        }
}

Recycler view uses the adapter view holder pattern to initialize the adapter JwelleryAdapter class

package com.innovation.myapp.jwelleryonrent.model.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.innovation.myapp.jwelleryonrent.R;
import com.innovation.myapp.jwelleryonrent.View.MainActivity;
import com.innovation.myapp.jwelleryonrent.model.pojo.JwelleryCollection;
import com.innovation.myapp.jwelleryonrent.model.utilities.Constants;
import com.squareup.picasso.Picasso;

import java.util.List;

/**
 * 
 */
public class JwelleryAdapter extends RecyclerView.Adapter<JwelleryAdapter.Holder> {
    private List<JwelleryCollection> mJwelleryCollection;
    CustomItemClickListner  itemListner;
    Context mContext;

    public JwelleryAdapter(List<JwelleryCollection> jwellery) {
        mJwelleryCollection = jwellery;

    }
    public JwelleryAdapter(  List<JwelleryCollection> jwellery,CustomItemClickListner listner) {
        mJwelleryCollection = jwellery;
        this.itemListner = listner;

    }

    @Override
    public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
        View row = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_row,parent,false);
        final Holder mViewHolder = new Holder(row);
        row.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                itemListner.onItemClick(v,mViewHolder.getPosition());
            }
        });
        return mViewHolder;
    }



    @Override
    public void onBindViewHolder(JwelleryAdapter.Holder holder, int position) {
        JwelleryCollection currentJwellery = mJwelleryCollection.get(position);
        holder.mName.setText(currentJwellery.mName);
        holder.mCategory.setText(currentJwellery.mCategory);
        holder.mPrice.setText(Double.toString(currentJwellery.mPrice));
        holder.mInstructions.setText(currentJwellery.mInstructions);

        Picasso.with(holder.itemView.getContext()).load(Constants.PHOTO_URL + currentJwellery.mPhoto).into(holder.mImage);


    }
    public void addJwellery(JwelleryCollection jwellery) {
        mJwelleryCollection.add(jwellery);
        notifyDataSetChanged();
    }
    @Override
    public int getItemCount() {
        return mJwelleryCollection.size();
    }
    public class Holder extends RecyclerView.ViewHolder implements View.OnClickListener {
        Context contxt;
        public TextView mName, mCategory, mPrice, mInstructions;
        public ImageView mImage;

        public Holder(View itemView) {
            super(itemView);
            mImage = (ImageView) itemView.findViewById(R.id.flowerImage);
            mName = (TextView) itemView.findViewById(R.id.flowerName);
            mCategory = (TextView) itemView.findViewById(R.id.flowerCategory);
            mPrice = (TextView) itemView.findViewById(R.id.flowerPrice);
            mInstructions = (TextView) itemView.findViewById(R.id.flowerInstruction);




        }


        public Holder(View itemView,int ViewType,Context c) {
        // Creating ViewHolder Constructor with View and viewType As a parameter
            super(itemView);
            contxt = c;
            itemView.setClickable(true);
            itemView.setOnClickListener(this);
        }
        @Override
        public void onClick(View v) {

        Toast.makeText(contxt, "The Item Clicked is: " + getPosition(), Toast.LENGTH_SHORT).show();
            }
        }


}

CustomerItemClickListner Interface to handle row item on click

package com.innovation.myapp.jwelleryonrent.model.adapter;

import android.view.View;

/**
 * 
 */
public interface CustomItemClickListner {
    public void onItemClick(View v,int position);
}

解决方案

First create one variable of your interface in your adapter:

CustomItemClickListener mListener;

then like you have set in your OnClick() method:

if (mListener != null) {
    mListener.onItemClick(v, getAdapterPosition());
}

and the last thing you need to modify in your adapter is creating new method which you will call later in your activity class for handling listener:

public void setOnItemClickListener(CustomItemClickListener listener) {
     mListener = listener;
}

now you can call this method in your activity like this:

adapter.setOnItemClickListener(this); // implement interface

           // or

adapter.setOnItemClickListener(new CustomItemClickListener());

这篇关于onItemClick不工作的卡片视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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