簡體   English   中英

如何處理onActivityResult覆蓋方法的接口

[英]How to handle interface for onActivityResult Override Method

我想在Adapter中使用onActivityResult方法,但在搜索Stack Overflow之后,我發現我必須為onActivityResult創建接口,但我不知道如何制作它並根據我的需要處理onActivityResult Methode。

這是我的適配器類。

    public class PosterAdapter extends RecyclerView.Adapter<PosterAdapter.PosterViewHolder> {


    private static final String TAG = "resPoster";
    private ArrayList<Poster> posterArrayList;
    private Context context;



    public PosterAdapter(ArrayList<Poster> posterArrayList, Context context) {
        this.posterArrayList = posterArrayList;
        this.context = context;
    }

    @NonNull
    @Override
    public PosterViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View itemView = LayoutInflater.from(viewGroup.getContext())
                .inflate(R.layout.sending_image_layout, viewGroup, false);

        return new PosterViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull PosterViewHolder posterViewHolder, int i) {

        posterViewHolder.imageViewDownload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                posterViewHolder.relativeLayoutImage.setDrawingCacheEnabled(true);

                Bitmap bitmap = Bitmap.createBitmap(posterViewHolder.relativeLayoutImage.getDrawingCache());
                posterViewHolder.relativeLayoutImage.setDrawingCacheEnabled(false);


                FileOutputStream outStream = null;
                File sdCard = Environment.getExternalStorageDirectory();
                File dir = new File(sdCard.getAbsolutePath() + "/providers");
                dir.mkdirs();
                String fileName = String.format("%d.jpg", System.currentTimeMillis());
                Log.d(TAG,"filename: " +  fileName);
                File outFile = new File(dir, fileName);
                Log.d(TAG,"outFile: " +  outFile);
                try {
                    outStream = new FileOutputStream(outFile);
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outStream);
                    outStream.flush();
                    outStream.close();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        });

        posterViewHolder.imageViewEdit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent();
                i.setType("image/*");
                i.setAction(Intent.ACTION_GET_CONTENT);
                i.addCategory(Intent.CATEGORY_OPENABLE);
//                startActivityForResult(i, 0);
                ((Activity) context).startActivityForResult(Intent.createChooser(i, "CHOOSING INTENT"), 0);
            }
        });



    }





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

    public class PosterViewHolder extends RecyclerView.ViewHolder {

        RelativeLayout relativeLayoutImage;
        ImageView imageViewBg, imageViewEdit, imageViewDownload, imageViewShare;
        CircleImageView imageViewProfie;

        public PosterViewHolder(@NonNull View posterView) {
            super(posterView);

            relativeLayoutImage = posterView.findViewById(R.id.image_relative);
            imageViewBg = posterView.findViewById(R.id.image_bg);
            imageViewProfie = posterView.findViewById(R.id.image_profile_moving);
            imageViewEdit = posterView.findViewById(R.id.edit_image);
            imageViewDownload = posterView.findViewById(R.id.download_image);
            imageViewShare = posterView.findViewById(R.id.share_image);

        }
    }

}

我想用這個班

 @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (resultCode == RESULT_OK) {
        if (requestCode == 0) {
            final Uri selectedUri = data.getData();
            if (selectedUri != null) {
                startCrop(selectedUri);
            } else {
                Toast.makeText(context, "Cannot retrieve selected Image", Toast.LENGTH_SHORT).show();
            }
        } else if (requestCode == UCrop.REQUEST_CROP) {
            handleCropResult(data);
        }
    }
    if (resultCode == UCrop.RESULT_ERROR) {
        handleCropError(data);
    }
}

請幫我在界面中處理這個方法。 謝謝。

**更新:**

這是我的活動代碼,以了解更多我的問題。

     RequestQueue requestQueue;
    private ArrayList<Poster> posterArrayList = new ArrayList<>();
    private RecyclerView recyclerView;
    private PosterAdapter posterAdapter;

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

        requestQueue = Volley.newRequestQueue(this);

        recyclerView = findViewById(R.id.recycler_poster);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));


        getAllPoster();
    }

    private void getAllPoster() {
        HashMap<String, String> params = new HashMap<String, String>();
        params.put("poster_id", "1");

        Log.d(TAG + "pp", String.valueOf(params));




        String Url = Constants.Base_URL + "poster/";

        JsonObjectRequest request = new JsonObjectRequest(Url,  new JSONObject(params),
                response -> {
                    Log.d("responsePending", String.valueOf(response));

                    try {
                        String statusResponseObject = response.getString("status");
                        String msgObject = response.getString("msg");

                        if (statusResponseObject.equals("200")){

                            JSONArray jsonArray = response.getJSONArray("response");

                            for (int i = 0; i < jsonArray.length(); i++) {
                                JSONObject pendingFragResponse = jsonArray.getJSONObject(i);

                                String posterObject = pendingFragResponse.getString("poster");
                                String positionObject = pendingFragResponse.getString("position");
                                String sizeObject = pendingFragResponse.getString("size");
                                String txt_positionObject = pendingFragResponse.getString("txt_position");
                                String titleObject = pendingFragResponse.getString("title");
                                String descriptionObject = pendingFragResponse.getString("description");


                                //

                                posterArrayList.add(new Poster(posterObject, positionObject,
                                        sizeObject, txt_positionObject,
                                        titleObject, descriptionObject));
                                posterAdapter = new PosterAdapter( posterArrayList, SendingImageActivity.this);
                                recyclerView.setAdapter(posterAdapter);
//                                wp10ProgressBar.hideProgressBar();
//                                wp10ProgressBar.setVisibility(View.GONE);

                            }
                            posterAdapter.notifyDataSetChanged();
//                            wp10ProgressBar.hideProgressBar();
                        }else {
//                            wp10ProgressBar.hideProgressBar();
//                            wp10ProgressBar.setVisibility(View.GONE);
                            Toast.makeText(SendingImageActivity.this, msgObject, Toast.LENGTH_SHORT).show();
                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                        Toast.makeText(this, "Server didn't response, Try after some time", Toast.LENGTH_LONG).show();
                    }



                }, error -> {
            error.printStackTrace();
            Log.d(TAG + "error", String.valueOf(error.getMessage()));
            Toast.makeText(this, "Server didn't response, Try after some time", Toast.LENGTH_LONG).show();

        });

        requestQueue.add(request);
    }




}


                    } catch (JSONException e) {
                        e.printStackTrace();
                        Toast.makeText(this, "Server didn't response, Try after some time", Toast.LENGTH_LONG).show();
                    }



                }, error -> {
            error.printStackTrace();
            Log.d(TAG + "error", String.valueOf(error.getMessage()));
            Toast.makeText(this, "Server didn't response, Try after some time", Toast.LENGTH_LONG).show();

        });

        requestQueue.add(request);
    }




}

而不是使用Interface模式只需在適配器內創建公共方法,並在onActivityResultActivity命中時調用該方法。

(這個答案只是針對您的場景的一種解決方法。理想情況下,您不應該將活動Context傳遞給適配器,而不是在活動內部發生任何操作(例如單擊編輯按鈕)時使用Interface模式並在活動中接收回調。傳遞相關數據,同時觸發適配器的回調。)

您可以在此處參考AllNoteActivity和NoteAdapter以供參考

所以你需要做的是將當前方法onActivityResult()從PosterAdapter放到活動中。 然后使方法startCrop(),handleCropResult()和handleCropError()public(我假設在PosterAdapter中)。

在onActivityResult()中,將startCrop()的調用更改為posterAdapter.startCrop()。 其他方法也一樣。 這應該做到這一點。

在適配器中創建方法

在您的適配器類中

    public void waterverYouWantMethod(){

}

當onActivityResult mehtod調用時,從Activity調用該方法。

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (resultCode == RESULT_OK) {
   // call that method here
adapter.wateverYouWantMethod();


    }

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM