android - 如何在 Activity 中从 RecyclerView 上的 onClick 开始 Activity

标签 android android-intent android-activity android-recyclerview custom-adapter

大家好 我试图在点击 RecyclerView 时启动 Activity,当我在 Custom Adapter 中添加代码时它会启动,但是当我在 Activity 中编写它时,它只是给我位置在日志 .. 所以任何帮助

这是 Activity 中的 OnClick 代码,这就是我尝试做的

@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();
    }

这是 Activity

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

这是适配器....

package com.abed.montage.hijabapptest;

import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.graphics.BitmapFactory;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import java.util.List;

/**
 * Created by hp15-AY on 02/27/2017.
 */

public class PhotoRecyclerViewAdapter extends RecyclerView.Adapter<PhotoRecyclerViewAdapter.DataObjectHolder> {

    private static String LOG_TAG = "MyRecyclerViewAdapter";
    private List<PhotoClass> mDataset;
    private static MyClickListener myClickListener;
Context context;
    public static class DataObjectHolder extends RecyclerView.ViewHolder
            implements View.OnClickListener {
        ImageView photo;


        public DataObjectHolder(View itemView) {
            super(itemView);
            photo = (ImageView) itemView.findViewById(R.id.photo);
            Log.i(LOG_TAG, "Adding Listener");
            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            myClickListener.onItemClick(getAdapterPosition(), v);
//            Context context = v.getContext();
//            Intent intent = new Intent(context, FinalActivity.class);
//            context.startActivity(intent);
        }
    }

    public void setOnItemClickListener(MyClickListener myClickListener) {
        this.myClickListener = myClickListener;
    }

    public PhotoRecyclerViewAdapter(List<PhotoClass> myDataset , Context context) {
        this.context = context ;
        mDataset = myDataset;
    }

    @Override
    public DataObjectHolder onCreateViewHolder(ViewGroup parent,
                                               int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.cardview_photo, parent, false);
        view.setBackgroundResource(R.drawable.rounded_frame);
        DataObjectHolder dataObjectHolder = new DataObjectHolder(view);
        return dataObjectHolder;
    }

    @Override
    public void onBindViewHolder(DataObjectHolder holder, int position) {
        holder.photo.setImageBitmap(BitmapFactory.decodeResource(context.getResources() ,mDataset.get(position).getImage()));
    }

    public void addItem(PhotoClass dataObj, int index) {
        mDataset.add(index, dataObj);
        notifyItemInserted(index);
    }

    public void deleteItem(int index) {
        mDataset.remove(index);
        notifyItemRemoved(index);
    }

    @Override
    public int getItemCount() {
        return mDataset.size();
    }

    public interface MyClickListener {
        public void onItemClick(int position, View v);
    }
}

这是类......

public class PhotoClass {
    int id;
    int image ;

    public PhotoClass() {
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setImage(int image) {
        this.image = image;
    }

    public int getId() {
        return id;
    }

    public int getImage() {
        return image;
    }

}

FinalActivity OnCreate

 @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);

            }
        });}

加载图像函数:

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

最佳答案

我在 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);
            }
        });
 }
....
....
}

这是我找到的另一个例子

我在 onCreateViewHolder 中的 view 上创建了 setOnClickListener

public class MyClassAdapter extends RecyclerView.Adapter<MyClassAdapter.MyClassViewHolder> {
....
....
....
@NonNull
@Override
public MyClassViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        View view = layoutInflater.inflate(R.layout.row_item_example, parent, false);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                System.out.println("Click in oncReateViewHolder");
            }
        });
        return new SolicitudViewHolder(view);
    }
....
....
}

关于android - 如何在 Activity 中从 RecyclerView 上的 onClick 开始 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42819209/

相关文章:

android - 从标题 TextView 小部件设置文本

java - 在 Titanium 中设置 Android Activity

android - DynamoDB - 请求中包含的安全 token 已过期

android - getfromLocation 返回海洋或海洋名称

android - 在哪里放置 keystore 文件在 Android 中?

android - 当多个 Activity 收到时如何区分 Intent

android - 登录成功后如何开始新 Activity ?

在 Eclipse 中调试 Android 框架

java - 应用程序在 Activity 之间切换时未运行

android - 如果用户 5 分钟没有 Activity ,如何启动登录 Activity :