gpt4 book ai didi

java - Cardview onclick 事件不适用于 clickable=true

转载 作者:行者123 更新时间:2023-12-02 00:59:23 24 4
gpt4 key购买 nike

这是我迄今为止所取得的成就

图像适配器

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"
};
}

查看

<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>

我正在尝试通过 onclick 监听器启动另一个 Intent 来对 CardView 产生链式 react 。但是当启用波纹效果时,onclick事件不起作用。我只看到链式 react 。 Onclick 监听器不起作用。如何实现两者兼得?请帮忙

完整的主要 Activity

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;
}
}

}

最佳答案

内部适配器方法 getView()

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

编辑

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 实现 CustomClick

new ImageAdapter(this, this)

关于java - Cardview onclick 事件不适用于 clickable=true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60909207/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com