Cardview onclick event is not working with clickable=true

Aroo :

This what I have achieved so far

Image adapter

public class ImageAdapter extends BaseAdapter {
    private Context mContext;
    TextView text;
    ImageView imageView;

    // Constructor
    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = View.inflate(mContext, R.layout.grid_view, null);
        RelativeLayout rl = (RelativeLayout) view.findViewById(R.id.relaGrid);

        ImageView image = (ImageView) rl.findViewById(R.id.chooseImage);
        TextView text = (TextView) rl.findViewById(R.id.chooseText);       
        image.setImageResource(mThumbIds[position]);
        text.setText(mThumbTxt[position]);
        Typeface customFont = Typeface.createFromAsset(mContext.getAssets(), "fonts/faruma.ttf");
        text.setTypeface(customFont);
        return rl;
    }

    // Keep all Images in array
    public Integer[] mThumbIds = {
        R.drawable.ic_action_gallery, R.drawable.ic_action_gallery,
        R.drawable.ic_action_gallery, R.drawable.ic_action_gallery,
        R.drawable.ic_action_gallery, R.drawable.ic_action_gallery,
        R.drawable.ic_action_gallery, R.drawable.ic_action_gallery
    };

    private String[] mThumbTxt = {
        "Morning", "Evening", "Test deler", "Hepsi", "Test 2", 
        "Test 3", "Test 4", "Test 5"
    };
}

View

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/relaGrid"
    android:descendantFocusability="blocksDescendants"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        card_view:cardCornerRadius="5dp"
        card_view:cardElevation="6dp"
        android:translationZ="5dp"
        android:clickable="true"
        android:foreground="?android:attr/selectableItemBackground"
        card_view:cardUseCompatPadding="true">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:onClick="onCardclick"
            android:clickable="true"
            android:paddingBottom="10dp">

    <ImageView
        android:id="@+id/chooseImage"
        android:layout_width="match_parent"
        android:layout_height="85dp">
    </ImageView>

    <TextView android:id="@+id/chooseText"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:textSize="18sp"
        android:layout_below="@+id/chooseImage"
        android:gravity="center"
        android:supportsRtl="true"
        android:singleLine="true"
        android:paddingRight="5dp"
        android:paddingLeft="5dp"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever">
        </TextView>

        </RelativeLayout>

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

</RelativeLayout>

I am trying to get ripple effect on cardview with onclick listener start another intent. but when ripple effect is enabled, onclick event is not working. I just only see ripple effect only. Onclick listener doesn't work. How to achieve both? Please help

Full MainActivity

package com.mycompany.alun;
import android.content.*;
import android.database.sqlite.*;
import android.graphics.*;
import android.os.*;
import android.support.v7.app.*;
import android.support.v7.widget.*;
import android.support.v7.widget.SearchView;
import android.util.*;
import android.view.*;
import android.widget.*;
import android.widget.AdapterView.*;
import java.io.*;

import android.support.v7.widget.Toolbar;
import android.app.*;
import android.support.v4.view.*;

public class MainActivity extends AppCompatActivity {
    SQLiteDatabase sqLiteDatabase;
    DatabaseHelper mDBHelper;
    TextView APP_NAME;
    SearchView searchView;

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

        mDBHelper = new DatabaseHelper(this);

        //Check exists database
        File database = getApplicationContext().getDatabasePath(DatabaseHelper.DBNAME);
        if(false == database.exists()) {
            mDBHelper.getReadableDatabase();
            //Copy db
            if(copyDatabase(this)) {
                Toast.makeText(this, "Copy database succes", Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "Copy data error", Toast.LENGTH_SHORT).show();
                return;
            }
        }

        // Custom title
        TextView textCustomTitle = (TextView) findViewById(R.id.appName);
        Typeface customFont = Typeface.createFromAsset(this.getAssets(), "fonts/faruma.ttf");
        textCustomTitle.setTypeface(customFont);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));

        if (!isTaskRoot()) {
            finish();
            return;
        }
    }

    public void onCardclick(AdapterView<?> a, View v, int position, long id) {

        switch(position)
        {
            case 0:
                Intent newActivity = new Intent(MainActivity.this,ViewDataActivity.class);
                startActivity(newActivity);
                break;

            case 1:
                Intent newActivity2 = new Intent(MainActivity.this,MorningActivity.class);
                startActivity(newActivity2);
                break;

            case 2:
                Intent new1Activity = new Intent(MainActivity.this,ViewDataActivity.class);
                startActivity(new1Activity);
                break;
            case 3:
                Bitmap src = BitmapFactory.decodeResource(getResources(), R.drawable.daily_life); // the original file yourimage.jpg i added in resources
                Bitmap dest = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888);

                String yourText = "My custom Text adding to Image";

                Canvas cs = new Canvas(dest);
                Paint tPaint = new Paint();
                tPaint.setTextSize(35);
                tPaint.setColor(Color.BLUE);
                tPaint.setStyle(Paint.Style.FILL);
                cs.drawBitmap(src, 0f, 0f, null);
                float height = tPaint.measureText("yY");
                float width = tPaint.measureText(yourText);
                float x_coord = (src.getWidth() - width)/2;
                cs.drawText(yourText, x_coord, height+15f, tPaint); // 15f is to put space between top edge and the text, if you want to change it, you can
                try {
                    dest.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(new File("/sdcard/ImageAfterAddingText.jpg")));
                    // dest is Bitmap, if you want to preview the final image, you can display it on screen also before saving
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                break;
            case 4:
                new CustomToast(getApplicationContext(), getApplicationContext().getString(R.string.add_favorites));
                break;
            case 5:
                Intent searchActivity = new Intent(MainActivity.this,SearchActivity.class);
                startActivity(searchActivity);
                break;
            default:
                Toast.makeText(MainActivity.this, "Wrong Input", Toast.LENGTH_LONG).show();
        }

    }

    @Override
    public boolean onCreateOptionsMenu(final Menu menu) {
        getMenuInflater().inflate(R.menu.nav_menu, menu);
        MenuItem searchItem = menu.findItem(R.id.action_search);
        return super.onCreateOptionsMenu(menu);
    }

    public void getInput(String searchText)
    {
        Intent in = new Intent(this, SearchActivity.class);
        in.putExtra("SEARCH", searchText);
        startActivity(in);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.action_favorites) {
            Intent newActivity = new Intent(MainActivity.this,FavoritesActivity.class);
            startActivity(newActivity);
        }

        if (item.getItemId() == R.id.action_search) {
            Intent newActivity = new Intent(MainActivity.this,SearchActivity.class);
            startActivity(newActivity);
        }

        return super.onOptionsItemSelected(item);
    }

    private boolean copyDatabase(Context context) {
        try {
            InputStream inputStream = context.getAssets().open(DatabaseHelper.DBNAME);
            String outFileName = DatabaseHelper.DBLOCATION + DatabaseHelper.DBNAME;
            Log.d("ViewDataActivity", "outFileName : "+outFileName);
            OutputStream outputStream = new FileOutputStream(outFileName);
            byte[]buff = new byte[1024];
            int length = 0;
            while ((length = inputStream.read(buff)) > 0) {
                outputStream.write(buff, 0, length);
            }
            outputStream.flush();
            outputStream.close();
            Log.w("ViewDataActivity","DB copied");
            return true;
        }catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

}
TomMat :

Inside adapter method getView()

CardView cardView = view.findViewById(R.id.card_view_id_from_grid_view)
cardView.setOnClickListener(...) 

EDIT

interface CustomClick{
     void onClick(int position)
}

private CustomClick customClick;

// Constructor
    public ImageAdapter(Context c, CustomClick customClick) {
        mContext = c;
        this.customClick = customClick;

    }

cardView.setOnClickListener(view -> customClick.onClick(position))

MainActivity implements CustomClick

new ImageAdapter(this, this)

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=394970&siteId=1