Android 如何在activity中从onClick on RecyclerView启动活动
大家好,我正在尝试启动活动,当我单击Android 如何在activity中从onClick on RecyclerView启动活动,android,android-intent,android-activity,android-recyclerview,custom-adapter,Android,Android Intent,Android Activity,Android Recyclerview,Custom Adapter,大家好,我正在尝试启动活动,当我单击RecyclerView时,它会在我在自定义适配器中添加代码时启动,但当我在活动中写入代码时,它只会给我日志上的位置。。 有什么帮助吗 下面是代码OnClick-in活动,这就是我试图做的 @Override public void onItemClick(int position, View v) { Log.e("TAG", "You clicked number " + mAdapter.getItemId(position) +
RecyclerView
时,它会在我在自定义适配器中添加代码时启动,但当我在活动中写入代码时,它只会给我日志上的位置。。
有什么帮助吗
下面是代码OnClick-in活动,这就是我试图做的
@Override
public void onItemClick(int position, View v) {
Log.e("TAG", "You clicked number " + mAdapter.getItemId(position) + ", which is at cell position " + position);
// this.startActivity(new Intent(FrameListActivity.this , FinalActivity.class));
// Bitmap frameSelected = results.get(position).getImage();
// Log.e("frameSelected" , frameSelected+"");
// createImageFromBitmap(frameSelected , "frameImage");
positionId = "" + position;
Context context = v.getContext();
Intent intent = new Intent(context.getApplicationContext() , FinalActivity.class);
intent.putExtra("resultpos", "" + positionId);
context.getApplicationContext().startActivity(intent);
finish();
}
这里是活动
package com.abed.montage.hijabapptest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import com.kbeanie.imagechooser.api.ImageChooserManager;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
public class FrameListActivity extends AppCompatActivity implements PhotoRecyclerViewAdapter.MyClickListener {
private RecyclerView photoRecyclerView;
private RecyclerView.Adapter mAdapter;
private List<Integer> framePhotoList ;
List<PhotoClass> results ;
private static String LOG_TAG = "CardViewActivity";
String positionId ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_frame_list);
photoRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
photoRecyclerView.setHasFixedSize(true);
int numberOfColumns = 2;
// mLayoutManager = new LinearLayoutManager();
photoRecyclerView.setLayoutManager(new GridLayoutManager(this , numberOfColumns));
mAdapter = new PhotoRecyclerViewAdapter(getDataSet() , this);
photoRecyclerView.setAdapter(mAdapter);
}
@Override
protected void onResume() {
super.onResume();
((PhotoRecyclerViewAdapter) mAdapter).setOnItemClickListener(new PhotoRecyclerViewAdapter
.MyClickListener() {
@Override
public void onItemClick(int position, View v) {
Log.i(LOG_TAG, " Clicked on Item " + position);
}
});
}
private List<PhotoClass> getDataSet() {
fillPhotoFrameList();
results = new ArrayList<>();
for (int index = 0; index < framePhotoList.size(); index++) {
PhotoClass obj = new PhotoClass();
obj.setImage(framePhotoList.get(index));
results.add(index, obj);
}
return results;
}
private void fillPhotoFrameList(){
framePhotoList = new ArrayList<>();
framePhotoList.add(R.drawable.frame_1);
framePhotoList.add(R.drawable.frame_2);
framePhotoList.add(R.drawable.frame_3);
framePhotoList.add(R.drawable.frame_4);
framePhotoList.add(R.drawable.frame_5);
framePhotoList.add(R.drawable.frame_6);
framePhotoList.add(R.drawable.frame_7);
framePhotoList.add(R.drawable.frame_8);
framePhotoList.add(R.drawable.frame_2);
framePhotoList.add(R.drawable.frame_10);
framePhotoList.add(R.drawable.frame_11);
framePhotoList.add(R.drawable.frame_12);
framePhotoList.add(R.drawable.frame_13);
framePhotoList.add(R.drawable.frame_14);
framePhotoList.add(R.drawable.frame_15);
framePhotoList.add(R.drawable.frame_16);
framePhotoList.add(R.drawable.frame_17);
framePhotoList.add(R.drawable.frame_18);
framePhotoList.add(R.drawable.frame_19);
framePhotoList.add(R.drawable.frame_20);
}
@Override
public void onItemClick(int position, View v) {
Log.e("TAG", "You clicked number " + mAdapter.getItemId(position) + ", which is at cell position " + position);
// this.startActivity(new Intent(FrameListActivity.this , FinalActivity.class));
// Bitmap frameSelected = results.get(position).getImage();
// Log.e("frameSelected" , frameSelected+"");
// createImageFromBitmap(frameSelected , "frameImage");
positionId = "" + position;
Context context = v.getContext();
Intent intent = new Intent( context , FinalActivity.class);
intent.putExtra("resultpos", "" + positionId);
context.startActivity(intent);
finish();;
}
public String createImageFromBitmap(Bitmap bitmap , String fileNameForSave) {
String fileName = fileNameForSave;//no .png or .jpg needed
try {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bytes);
FileOutputStream fo = openFileOutput(fileName, Context.MODE_PRIVATE);
fo.write(bytes.toByteArray());
// remember close file output
fo.close();
} catch (Exception e) {
e.printStackTrace();
fileName = null;
}
return fileName;
}
}
创建时的最终性
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "Activity Created");
setContentView(R.layout.activity_final);
mGlobal = (Global) getApplicationContext();
imageViewThumbnail = (ImageView) findViewById(R.id.selectedimage);
saveIcon = (ImageView) findViewById(R.id.imageSave);
filterIcon = (ImageView) findViewById(R.id.editImage);
mImageViewFrame = (ImageView) findViewById(R.id.frameimage);
// mInterstitialAd = new InterstitialAd(this);
// mInterstitialAd.setAdUnitId(getApplicationContext().getString(R.string.admob_intersitials));
// mAdRequest= new AdRequest.Builder().build();
// mInterstitialAd.loadAd(mAdRequest);
imageViewThumbnail.setOnTouchListener(new MultiTouchListener());
mDialog = Utils.SetProgressBar(mDialog, FinalActivity.this);
mDialog.dismiss();
loadImage(imageViewThumbnail, mGlobal.getPath());
String result = getIntent().getStringExtra("resultpos");
pos = Integer.parseInt(result);
Log.w("Position===", "" + pos);
String imagevalue = frames[pos];
Log.w("imagename=====++++", "" + imagevalue);
int resID = getResources().getIdentifier(imagevalue, "drawable", getPackageName());
mImageViewFrame.setImageResource(resID);
saveIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// if (mInterstitialAd.isLoaded()) {
// mInterstitialAd.show();
// }
RelativeLayout view = (RelativeLayout) findViewById(R.id.layout);
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bm = view.getDrawingCache();
SaveImage(bm);
}
});
filterIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RelativeLayout view = (RelativeLayout) findViewById(R.id.layout);
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bm = view.getDrawingCache();
EditImage(bm);
}
});}
loadImage功能:
private void loadImage(ImageView iv, final String path) {
if(!isAirplaneModeOn(this.getApplicationContext())) {
Picasso.with(FinalActivity.this)
.load(Uri.fromFile(new File(path)))
.fit()
.centerInside()
.into(iv, new Callback() {
@Override
public void onSuccess() {
Log.i(TAG, "Picasso Success Loading Thumbnail - " + path);
}
@Override
public void onError() {
Log.i(TAG, "Picasso Error Loading Thumbnail Small - " + path);
}
});
}
else{
//do something else?
}
File image = new File(path);
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
Bitmap bitmap = BitmapFactory.decodeFile(image.getAbsolutePath(), bmOptions);
engrave(bitmap);
// bitmap = Bitmap.createScaledBitmap(bitmap,parent.getWidth(),parent.getHeight(),true);
}
@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public static boolean isAirplaneModeOn(Context context) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
return Settings.System.getInt(context.getContentResolver(),
Settings.System.AIRPLANE_MODE_ON, 0) != 0;
} else {
return Settings.Global.getInt(context.getContentResolver(),
Settings.Global.AIRPLANE_MODE_ON, 0) != 0;
}
}
}
private void loadImage(ImageView iv,最终字符串路径){
如果(!isAirplaneModeOn(this.getApplicationContext())){
毕加索(最终性,本)
.load(Uri.fromFile(新文件(路径)))
.fit()
.centerInside()
.into(iv,新回调(){
@凌驾
成功时的公共无效(){
Log.i(标记“毕加索成功加载缩略图-”+路径);
}
@凌驾
公开无效{
Log.i(标记,“毕加索加载缩略图时出错-小-”+路径);
}
});
}
否则{
//做点别的吗?
}
文件映像=新文件(路径);
BitmapFactory.Options bmOptions=新的BitmapFactory.Options();
位图位图=位图工厂.decodeFile(image.getAbsolutePath(),bmOptions);
雕刻(位图);
//位图=位图.createScaledBitmap(位图,parent.getWidth(),parent.getHeight(),true);
}
@抑制警告(“弃用”)
@TargetApi(Build.VERSION\u code.JELLY\u BEAN\u MR1)
公共静态布尔isAirplaneModeOn(上下文){
if(Build.VERSION.SDK\u INT
使用以下方法:
@Override
public void onItemClick(int position, View v) {
Log.e("TAG", "You clicked number " + mAdapter.getItemId(position) + ", which is at cell position " + position);
// this.startActivity(new Intent(FrameListActivity.this , FinalActivity.class));
// Bitmap frameSelected = results.get(position).getImage();
// Log.e("frameSelected" , frameSelected+"");
// createImageFromBitmap(frameSelected , "frameImage");
positionId = "" + position;
Context context = FrameListActivity.this;
Intent intent = new Intent(context , FinalActivity.class);
intent.putExtra("resultpos", "" + positionId);
context.startActivity(intent);
finish();
}
希望这能有所帮助。使用以下方法:
@Override
public void onItemClick(int position, View v) {
Log.e("TAG", "You clicked number " + mAdapter.getItemId(position) + ", which is at cell position " + position);
// this.startActivity(new Intent(FrameListActivity.this , FinalActivity.class));
// Bitmap frameSelected = results.get(position).getImage();
// Log.e("frameSelected" , frameSelected+"");
// createImageFromBitmap(frameSelected , "frameImage");
positionId = "" + position;
Context context = FrameListActivity.this;
Intent intent = new Intent(context , FinalActivity.class);
intent.putExtra("resultpos", "" + positionId);
context.startActivity(intent);
finish();
}
希望这有帮助。试试这个:
在您的onResume():
中,您已经将setOnItemClickListener
附加到PhotoRecycleWebAdapter
@Override
protected void onResume() {
super.onResume();
((PhotoRecyclerViewAdapter) mAdapter).setOnItemClickListener(new PhotoRecyclerViewAdapter
.MyClickListener() {
@Override
public void onItemClick(int position, View v) {
Log.i(LOG_TAG, " Clicked on Item " + position);
Intent intent = new Intent(FrameListActivity.this , FinalActivity.class);
intent.putExtra("resultpos", "" + position);
startActivity(intent);
}
});
}
试试这个:
在您的onResume():
中,您已经将setOnItemClickListener
附加到PhotoRecycleWebAdapter
@Override
protected void onResume() {
super.onResume();
((PhotoRecyclerViewAdapter) mAdapter).setOnItemClickListener(new PhotoRecyclerViewAdapter
.MyClickListener() {
@Override
public void onItemClick(int position, View v) {
Log.i(LOG_TAG, " Clicked on Item " + position);
Intent intent = new Intent(FrameListActivity.this , FinalActivity.class);
intent.putExtra("resultpos", "" + position);
startActivity(intent);
}
});
}
我在
onBindViewHolder
中的itemView
中使用了setOnClickListener
itemView就像所有包含该项的事物的容器
public class MyClassAdapter extends RecyclerView.Adapter<MyClassAdapter.MyClassViewHolder> {
....
....
....
@Override
public void onBindViewHolder(@NonNull final MyClassViewHolder holder, int position) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Context context = v.getContext();
Intent intent = new Intent(context , NewActivity.class);
context.startActivity(intent);
}
});
}
....
....
}
我在
onBindViewHolder
中的itemView
中使用了setOnClickListener
itemView就像所有包含该项的事物的容器
public class MyClassAdapter extends RecyclerView.Adapter<MyClassAdapter.MyClassViewHolder> {
....
....
....
@Override
public void onBindViewHolder(@NonNull final MyClassViewHolder holder, int position) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Context context = v.getContext();
Intent intent = new Intent(context , NewActivity.class);
context.startActivity(intent);
}
});
}
....
....
}
据我所知,将
onClickListener
附加到recyclerView
的正确方法是使用onBindViewHolder
方法,这是下面答案中提到的第一个选项。此方法将属性绑定到每个recyclerview项,因此也可以类似地附加onClickListener
据我所知,将onClickListener
附加到recyclerView
的正确方法是使用onBindViewHolder
方法,这是下面答案中提到的第一个选项。此方法将属性绑定到每个recyclerview项,因此也可以类似地附加onClickListener
发布类的完整代码..发布类的完整代码..检查我的更新答案,上下文。startActivity(intent),您是否在活动中添加了自定义适配器?是的,我添加了。如果我没有添加,则不会显示带有数据的适配器,并且更新不起作用。我已编辑:intent intent=new intent(上下文,FinalActivity.class);现在请检查。您传递给适配器的是什么?请显示完整的代码。我更新我的问题添加完整的代码。您是否检查它请检查我更新的答案,context.startActivity(intent),您是否在活动中添加了自定义适配器?是的,我添加了。如果我没有添加,则不会向我显示带有数据的适配器,并且更新不起作用。我已编辑:Intent Intent=new Intent(context,FinalActivity.class);现在请检查。您要传递给适配器的是什么?请显示完整代码。我更新了我的问题添加了完整代码。您是否要检查它?我现在有另一个问题,当它开始活动时需要花费很长时间,如3秒,请您检查代码并感谢:)sry的延迟响应…登录onResume()
查看它是否立即调用…我认为你的最终性
类可能会执行繁重的操作,这就是为什么加载新活动需要时间的原因…如果你愿意,有没有办法向你展示完整的代码来跟踪它?我认为根据活动的生命周期,OnCreate中会发生繁重的操作。。。因此,我会更新我的问题,添加一个最终性的创建,你能检查一下吗?然后这个日志:Log.I(标记,“活动创建”)代码>这是立即显示的吗?我现在有另一个问题,当它开始活动时需要很长的时间,比如3秒钟,请您检查代码并感谢:)sry的延迟响应…登录onResume()
查看它是否立即调用…我认为你的最终性
类可能会执行繁重的操作,这就是为什么加载新活动需要时间的原因…如果你愿意,有没有办法向你展示完整的代码来跟踪它?我认为根据活动的生命周期,OnCreate中会发生繁重的操作。。。因此,我会更新我的问题,添加一个最终性的创建,你能检查一下吗?然后这个日志:Log.I(标记,“活动创建”)代码>这是即时显示的吗