我正在尝试在sap.setVisibleSignature(new Rectangle(425, 218, 575, 248), 1, null);
中使用onActivityResult
。但是我得到一个错误,即“方法不会从其超类重写”。我尝试实现该接口,但从未调用RecyclerViewAdapter
。我已经对StackOverflow问题like this one进行了足够的搜索,但是找不到任何有用的东西。
RecyclerViewAdapter.java
onActivityResult
showImages.java
package com.example.waheed.telegramchat;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
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.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> {
//String arrays to store user data
static String[] contact_name, Phone_no,user_id;
Context context;
public RecyclerAdapter(String[] contact_name, String[] Phone_no,String[] user_id, Context context) {
//Getting the data from MainActivity.java
this.context=context;
this.user_id=user_id;
this.contact_name = contact_name;
this.Phone_no = Phone_no;
}
@NonNull
@Override
public RecyclerAdapter.RecyclerViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//Setting the row layout for Recyclerview
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout, parent, false);
RecyclerViewHolder recyclerViewHolder = new RecyclerViewHolder(view,this.context);
return recyclerViewHolder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerViewHolder holder, int position) {
holder.tx_contact.setText(contact_name[position]);
holder.tx_phone.setText(Phone_no[position]);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
@Override
public int getItemCount() {
return contact_name.length;
}
public static class RecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
Context context;
TextView tx_contact, tx_phone;
ImageButton message_btn;
static ImageView img_profile;
public RecyclerViewHolder(View itemView, Context context) {
super(itemView);
tx_contact = (TextView) itemView.findViewById(R.id.txt_contactname);
tx_phone = (TextView) itemView.findViewById(R.id.phonenumber);
message_btn = (ImageButton) itemView.findViewById(R.id.chat_icon);
img_profile=(ImageView) itemView.findViewById(R.id.profile_pic);
this.context=context;
//Calling onclick function
message_btn.setOnClickListener(this);
img_profile.setOnClickListener(this);
}
public void makeCall(String ID,String name, String packageName, String className){
//
String data = "content://com.android.contacts/data/" + ID;
// Build the intent
Intent intent =new Intent();
intent.setAction(Intent.ACTION_VIEW);
// the _ids you save goes here at the end of /data/id
intent.setData(Uri.parse("content://com.android.contacts/data/"+ID));
intent.setDataAndType(Uri.parse(data), className);
intent.setPackage(packageName);
// Verify it resolves
PackageManager packageManager = context.getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isIntentSafe = activities.size() > 0;
Log.d("See this "+ID, activities.size()+"");
// Start an activity if it's safe
if (isIntentSafe) {
try {
//Toast to show which user is being called
context.startActivity(intent);
Toast.makeText(context,"Opening chat with "+name+" on Telegram",Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(context, "OOPS!,Something went wrong\nPlease grant app permissions in setting or send feedback.", Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onClick(View v) {
//Getting the position of the item clicked
int i = getAdapterPosition();
//Storing the selected items in Strings
String name = RecyclerAdapter.contact_name[i];
String phone = RecyclerAdapter.Phone_no[i];
String ID = RecyclerAdapter.user_id[i];
String mimeType = "vnd.android.cursor.item/vnd.org.telegram.messenger.android.profile";
String packageName = "org.telegram.messenger";
switch (v.getId()) {
case R.id.chat_icon:
makeCall(ID, name, packageName, mimeType);
break;
case R.id.profile_pic:
Intent intent = new Intent(this.context, showImages.class);
((Activity) context).startActivityForResult(intent, 1);
break;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap bitmap;
if (requestCode == 1) {
if(resultCode == showImages.RESULT_OK){
String result=data.getStringExtra("result");
Toast.makeText(this.context, "Clicked item is "+result, Toast.LENGTH_SHORT).show();
bitmap = BitmapFactory.decodeFile(result);
RecyclerViewHolder.img_profile.setImageBitmap(bitmap);
}
if (resultCode == showImages.RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
};
}
答案 0 :(得分:0)
您必须重写onActivityResult,因为其活动中包含的recyclerview不在viewholder类中
答案 1 :(得分:0)
您必须在活动类中而不是RecyclerViewAdapter中实现onActivityResult
。您的活动使用此方法从活动开始的其他意图/活动中检索数据
它在RecyclerViewAdapter中没有位置。
答案 2 :(得分:0)
RecyclerView.ViewHolder从来没有要重写的onActivityResult方法。 据我了解,onActivityResult仅出现在activity & fragment中。
移动代码
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap bitmap;
if (requestCode == 1) {
if(resultCode == showImages.RESULT_OK){
String result=data.getStringExtra("result");
Toast.makeText(this.context, "Clicked item is "+result, Toast.LENGTH_SHORT).show();
bitmap = BitmapFactory.decodeFile(result);
RecyclerViewHolder.img_profile.setImageBitmap(bitmap);
}
if (resultCode == showImages.RESULT_CANCELED) {
//Write your code if there's no result
}
}
}
到课程showImages
更新:不是类showImages
,应该是开始showImages
的类。将代码放在以showImages
开始的类上。我注意到showImages
在单击项目时关闭。
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String result=imagePaths.get(position);
Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(showImages.RESULT_OK,returnIntent);
finish();
}
});
答案 3 :(得分:0)
您应该在活动中使用onActivityForResult,并创建用于处理操作的界面,逻辑-适配器仅显示视图。