如何在RecyclerViewAdapter中返回startActivityonResult?(How to return the startActivityonResult in RecyclerV

编程入门 行业动态 更新时间:2024-10-24 18:24:15
如何在RecyclerViewAdapter中返回startActivityonResult?(How to return the startActivityonResult in RecyclerViewAdapter?)

我已经使用此功能打开图库并从图库中选择照片(此功能在适配器中):

private class ViewSimple extends RecyclerView.ViewHolder { ImageView button; public ViewSimple(View itemView) { super(itemView); button = (ImageView)itemView.findViewById(R.id.imgAdding); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FragmentActivity activity = (FragmentActivity)context; Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); intent.setType("image/*"); activity.startActivityForResult(Intent.createChooser(intent, "Select File"),SELECT_PICTURE); } }); } }

现在我在碎片中做了这个:

public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); BitmapFactory.Options btmapOptions; if (requestCode == SELECT_PICTURE && resultCode == Activity.RESULT_OK) { final Uri selectedImageUri = data.getData(); String tempPath = getPath(selectedImageUri, this.getActivity()); final Bitmap bm; btmapOptions = new BitmapFactory.Options(); btmapOptions.inSampleSize = 2; bm = BitmapFactory.decodeFile(tempPath, btmapOptions); AircraftAdapter.bmp = bm; } } public String getPath(Uri uri, Activity activity) { String[] projection = {MediaStore.MediaColumns.DATA}; Cursor cursor = activity.managedQuery(uri, projection, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA); cursor.moveToFirst(); return cursor.getString(column_index); }

现在我想将结果返回到cardview ..我可以这样做吗? 如果我将图像返回到服务器,我使用Picasso ......在这种情况下可以使用它吗?

编辑 :这是片段类:

public class AddAircraftFragment extends Fragment { RecyclerView recyclerView; private static final int SELECT_PICTURE = 111; public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_add_aircraft, container, false); recyclerView=(RecyclerView)rootView.findViewById(R.id.recyclerAircraftAdd); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity()); recyclerView.setLayoutManager(layoutManager); AircraftAdapter adapter = new AircraftAdapter(); recyclerView.setAdapter(adapter); return rootView; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); BitmapFactory.Options btmapOptions; if (requestCode == SELECT_PICTURE && resultCode == Activity.RESULT_OK) { final Uri selectedImageUri = data.getData(); String tempPath = getPath(selectedImageUri, this.getActivity()); final Bitmap bm; btmapOptions = new BitmapFactory.Options(); btmapOptions.inSampleSize = 2; bm = BitmapFactory.decodeFile(tempPath, btmapOptions); AircraftAdapter.bmp = bm; } } public String getPath(Uri uri, Activity activity) { String[] projection = {MediaStore.MediaColumns.DATA}; Cursor cursor = activity.managedQuery(uri, projection, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } public void onAttach(Activity activity) { super.onAttach(activity); } public void onDetach() { super.onDetach(); }

}

谢谢

I've used this function to open gallery and select photo from gallery (this function is in adapter):

private class ViewSimple extends RecyclerView.ViewHolder { ImageView button; public ViewSimple(View itemView) { super(itemView); button = (ImageView)itemView.findViewById(R.id.imgAdding); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FragmentActivity activity = (FragmentActivity)context; Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); intent.setType("image/*"); activity.startActivityForResult(Intent.createChooser(intent, "Select File"),SELECT_PICTURE); } }); } }

now I made this in the Fragment:

public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); BitmapFactory.Options btmapOptions; if (requestCode == SELECT_PICTURE && resultCode == Activity.RESULT_OK) { final Uri selectedImageUri = data.getData(); String tempPath = getPath(selectedImageUri, this.getActivity()); final Bitmap bm; btmapOptions = new BitmapFactory.Options(); btmapOptions.inSampleSize = 2; bm = BitmapFactory.decodeFile(tempPath, btmapOptions); AircraftAdapter.bmp = bm; } } public String getPath(Uri uri, Activity activity) { String[] projection = {MediaStore.MediaColumns.DATA}; Cursor cursor = activity.managedQuery(uri, projection, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA); cursor.moveToFirst(); return cursor.getString(column_index); }

now I want to return the result to the cardview..how could I do it? If I return the image to server I use Picasso...it's possible to use it in this case?

EDIT: this is the fragment class:

public class AddAircraftFragment extends Fragment { RecyclerView recyclerView; private static final int SELECT_PICTURE = 111; public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_add_aircraft, container, false); recyclerView=(RecyclerView)rootView.findViewById(R.id.recyclerAircraftAdd); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity()); recyclerView.setLayoutManager(layoutManager); AircraftAdapter adapter = new AircraftAdapter(); recyclerView.setAdapter(adapter); return rootView; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); BitmapFactory.Options btmapOptions; if (requestCode == SELECT_PICTURE && resultCode == Activity.RESULT_OK) { final Uri selectedImageUri = data.getData(); String tempPath = getPath(selectedImageUri, this.getActivity()); final Bitmap bm; btmapOptions = new BitmapFactory.Options(); btmapOptions.inSampleSize = 2; bm = BitmapFactory.decodeFile(tempPath, btmapOptions); AircraftAdapter.bmp = bm; } } public String getPath(Uri uri, Activity activity) { String[] projection = {MediaStore.MediaColumns.DATA}; Cursor cursor = activity.managedQuery(uri, projection, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } public void onAttach(Activity activity) { super.onAttach(activity); } public void onDetach() { super.onDetach(); }

}

Thank you

最满意答案

片段类:

public class AddAircraftFragment extends Fragment { RecyclerView recyclerView; private static final int SELECT_PICTURE = 111; private ArrayList<String> arrayList = new ArrayList<>(); private AircraftAdapter adapter; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_add_aircraft, container, false); recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerAircraftAdd); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity()); recyclerView.setLayoutManager(layoutManager); adapter = new AircraftAdapter(getActivity(), arrayList); recyclerView.setAdapter(adapter); return rootView; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); BitmapFactory.Options btmapOptions; if (requestCode == SELECT_PICTURE && resultCode == Activity.RESULT_OK) { final Uri selectedImageUri = data.getData(); String tempPath = getPath(selectedImageUri, this.getActivity()); final Bitmap bm; btmapOptions = new BitmapFactory.Options(); btmapOptions.inSampleSize = 2; bm = BitmapFactory.decodeFile(tempPath, btmapOptions); arrayList.add(tempPath); adapter.notifyDataSetChanged(); } } public String getPath(Uri uri, Activity activity) { String[] projection = {MediaStore.MediaColumns.DATA}; Cursor cursor = activity.managedQuery(uri, projection, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } public void onAttach(Activity activity) { super.onAttach(activity); } public void onDetach() { super.onDetach(); } }

适配器:

public class AircraftAdapter extends RecyclerView.Adapter<AircraftAdapter.ViewHolder> { private Context mContext; private ArrayList<String> arrayList; public AircraftAdapter( Context context, ArrayList<String> aryLstMyCarModel) { mContext = context; this.arrayList = aryLstMyCarModel; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(mContext).inflate(R.layout.your_xml, parent, false); return new ViewHolder(v); } @Override public void onBindViewHolder(ViewHolder holder, final int position) { if (position == getItemCount()) { } if (arrayList.size() != 0) { File f = new File(arrayList.get(position)); Bitmap bitmap = decodeFile(f, your_width, your_height); holder.imageview.setImageBitmap(bitmap); } } @Override public int getItemCount() { return arrayList.size(); } class ViewHolder extends RecyclerView.ViewHolder { public ImageView imageview; public ViewHolder(View itemView) { super(itemView); imageview=(RelativeLayout)itemView.findViewById(R.id.imageview); } } }

用于解码

// to scale the bitmap private Bitmap decodeFile(File f, int WIDTH, int HIGHT) { try { // Decode image size BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; BitmapFactory.decodeStream(new FileInputStream(f), null, o); // The new size we want to scale to final int REQUIRED_WIDTH = WIDTH; final int REQUIRED_HIGHT = HIGHT; // Find the correct scale value. It should be the power of 2. int scale = 1; while (o.outWidth / scale / 2 >= REQUIRED_WIDTH && o.outHeight / scale / 2 >= REQUIRED_HIGHT) scale *= 2; // Decode with inSampleSize BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); } catch (FileNotFoundException e) { } return null; }

Fragment class :

public class AddAircraftFragment extends Fragment { RecyclerView recyclerView; private static final int SELECT_PICTURE = 111; private ArrayList<String> arrayList = new ArrayList<>(); private AircraftAdapter adapter; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_add_aircraft, container, false); recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerAircraftAdd); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity()); recyclerView.setLayoutManager(layoutManager); adapter = new AircraftAdapter(getActivity(), arrayList); recyclerView.setAdapter(adapter); return rootView; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); BitmapFactory.Options btmapOptions; if (requestCode == SELECT_PICTURE && resultCode == Activity.RESULT_OK) { final Uri selectedImageUri = data.getData(); String tempPath = getPath(selectedImageUri, this.getActivity()); final Bitmap bm; btmapOptions = new BitmapFactory.Options(); btmapOptions.inSampleSize = 2; bm = BitmapFactory.decodeFile(tempPath, btmapOptions); arrayList.add(tempPath); adapter.notifyDataSetChanged(); } } public String getPath(Uri uri, Activity activity) { String[] projection = {MediaStore.MediaColumns.DATA}; Cursor cursor = activity.managedQuery(uri, projection, null, null, null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } public void onAttach(Activity activity) { super.onAttach(activity); } public void onDetach() { super.onDetach(); } }

Adapter :

public class AircraftAdapter extends RecyclerView.Adapter<AircraftAdapter.ViewHolder> { private Context mContext; private ArrayList<String> arrayList; public AircraftAdapter( Context context, ArrayList<String> aryLstMyCarModel) { mContext = context; this.arrayList = aryLstMyCarModel; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(mContext).inflate(R.layout.your_xml, parent, false); return new ViewHolder(v); } @Override public void onBindViewHolder(ViewHolder holder, final int position) { if (position == getItemCount()) { } if (arrayList.size() != 0) { File f = new File(arrayList.get(position)); Bitmap bitmap = decodeFile(f, your_width, your_height); holder.imageview.setImageBitmap(bitmap); } } @Override public int getItemCount() { return arrayList.size(); } class ViewHolder extends RecyclerView.ViewHolder { public ImageView imageview; public ViewHolder(View itemView) { super(itemView); imageview=(RelativeLayout)itemView.findViewById(R.id.imageview); } } }

For decode

// to scale the bitmap private Bitmap decodeFile(File f, int WIDTH, int HIGHT) { try { // Decode image size BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; BitmapFactory.decodeStream(new FileInputStream(f), null, o); // The new size we want to scale to final int REQUIRED_WIDTH = WIDTH; final int REQUIRED_HIGHT = HIGHT; // Find the correct scale value. It should be the power of 2. int scale = 1; while (o.outWidth / scale / 2 >= REQUIRED_WIDTH && o.outHeight / scale / 2 >= REQUIRED_HIGHT) scale *= 2; // Decode with inSampleSize BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); } catch (FileNotFoundException e) { } return null; }

更多推荐

本文发布于:2023-07-09 02:21:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1082877.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何在   RecyclerViewAdapter   return   startActivityonResult

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!