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(标记,“活动创建”)这是即时显示的吗