java - 如何通过回调方法将点击位置的item传回Activity
问题描述
我正在尝试找到如何将单击的项目返回到 ListActivity(在此 Activity 中,列表适配器已启用)。我通过在适配器中使用 getAdapterPosition() 方法获得该项目。
列表活动
public class ListActivity extends AppCompatActivity implements ListAdapter.ItemClickListener {
//some irrelevant code
protected void onCreate(@Nullable Bundle savedInstanceState) {
adapter = new ListAdapter(context, this);
adapter.setClickListener(this);
//more irrelevant code
}
}
Adapter类里面的回调代码
public class ListAdapter extends RecyclerView.Adapter<ListAdapter.RowViewHolder> {
// Adapter class code
...
class RowViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView viewName;
ImageView viewFlag;
LinearLayout countryEntry;
RowViewHolder(View view) {
super(view);
viewName = view.findViewById(R.id.name);
viewFlag = view.findViewById(R.id.flag);
countryEntry = view.findViewById(R.id.rowId);
view.setOnClickListener(this);
}
public void onClick(View view) {
if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
ListActivity.position = getAdapterPosition();
final Country currentCountry = countriesList.get(getAdapterPosition());
listActivity.setCurrentCountry(currentCountry);
}
}
public void setClickListener(ItemClickListener itemClickListener) {
this.mClickListener = itemClickListener;
}
public interface ItemClickListener {
void onItemClick(View view, int position);
}
...
}
整个 Adapter 类(如果你想运行它)
public class ListAdapter extends RecyclerView.Adapter<ListAdapter.RowViewHolder> {
private ItemClickListener mClickListener;
FragmentManager fm;
Activity listActivity;
private Context context;
private List<Country> countriesList;
public ListAdapter(Context context, Activity listActivity) {
this.fm = fm;
this.listActivity = listActivity;
this.context = context;
countriesList = new ArrayList<>();
}
@NotNull
@Override
public RowViewHolder onCreateViewHolder(@NotNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(context)
.inflate(R.layout.row_list, parent,false);
// context = parent.getContext();
return new RowViewHolder(itemView);
}
class RowViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView viewName;
ImageView viewFlag;
LinearLayout countryEntry;
RowViewHolder(View view) {
super(view);
viewName = view.findViewById(R.id.name);
viewFlag = view.findViewById(R.id.flag);
countryEntry = view.findViewById(R.id.rowId);
view.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
ListActivity.position = getAdapterPosition();
final Country currentCountry = countriesList.get(getAdapterPosition());
//todo: can i return currentCountry to the listActivity in order to pass it?
}
}
public void setClickListener(ItemClickListener itemClickListener) {
this.mClickListener = itemClickListener;
}
public interface ItemClickListener {
void onItemClick(View view, int position);
}
@Override
public void onBindViewHolder(@NotNull RowViewHolder holder, int position) {
final Country currentCountry = countriesList.get(position);
int id = currentCountry.getId();
holder.viewName.setText(countriesList.get(position).getName());
Uri imageUrl = Uri.parse(String.valueOf(countriesList.get(position).getFlag()));
SvgLoader.pluck()
.with(listActivity)//Replace new MainActivity with activity
.setPlaceHolder(R.mipmap.ic_launcher, R.mipmap.ic_launcher)
.load(imageUrl, holder.viewFlag);
// holder.viewFlag.setImageURI(Uri.parse(String.valueOf(countriesList.get(position).getFlag())));
// holder.countryEntry.setOnClickListener(new View.OnClickListener() {
// });
}
@Override
public int getItemCount() {
return countriesList.size();
}
public void attachCountriesList(List<Country> countriesList) {
// getting list from Fragment.
this.countriesList = countriesList;
}
}
来自 Activity 的调用是adapter.setClickListener(this);
. 我一直在尝试将此调用的结果分配给一个 int 变量,但它没有用。
谢谢!
解决方案
推荐阅读
- c - 有人可以解释如何评估这个 C 代码片段 wrt 序列点吗?
- php - How to post a button's value in html form (PHP)
- python - 避免影响条件的二进制舍入错误的最佳方法是什么?
- php - 在发送 PHP Mailer 电子邮件之前验证字段
- java - 无法在 Android Studio 中创建测试文件夹
- android - 如何在Android中使用模态制作搜索视图
- excel - Openoffice.org Calc - 为变量赋值
- ios - 使用 ArcGis Api 在 iOS 上加载 pdf 地图
- android - Android jsonobject to listview socketio
- c# - Linq - 内存连接与 EF 连接