[英]How a item in recycler view is selected and get the item position to my activity
我创建了一个自定义对话框片段,它由一个 recyclerview 和一个按钮组成,当我单击它被选中的项目时,它应该突出显示,当单击按钮时,我希望特定项目的位置或特定项目的数据进入我的主要活动。 我尝试了不同的代码但没有得到它,引用了不同的答案并尝试了。 请帮我。
提前致谢。
对话框片段:
public class DiaFragment extends DialogFragment {
RecyclerView recyclerView;
public DiaFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_dialog, container, false);
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext(),LinearLayoutManager.HORIZONTAL,false);
recyclerView = (RecyclerView) v.findViewById(R.id.list);
ListAdapter listAdapter = new ListAdapter(getContext(),getData());
recyclerView.setAdapter(listAdapter);
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
return v;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setPositiveButton("OK", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
return super.onCreateDialog(savedInstanceState);
}
public static List<Listen> getData()
{
List<Listen> data = new ArrayList<>();
int[] images = {R.drawable.bottle,R.drawable.lotion,R.drawable.soap,R.drawable.soda,R.drawable.sodaa};
String[] texts = {"250ml","300ml","500ml","750ml","1ltr"};
for (int i=0;i<texts.length && i<images.length;i++){
Listen current = new Listen();
current.img = images[i];
current.text= texts[i];
data.add(current);
}
return data;
}
}
回收视图适配器:
public class ListAdapter extends RecyclerView.Adapter<ListAdapter.MyViewHolder> {
private LayoutInflater inflater;
List<Listen> data = Collections.emptyList();
private int selectedPos = 0;
public ListAdapter(Context context,List<Listen> data){
inflater = LayoutInflater.from(context);
this.data = data;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.row, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Listen current = data.get(position);
holder.text1.setText(current.text);
holder.imge.setImageResource(current.img);
holder.itemView.setSelected(selectedPos == position);
}
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView text1;
public ImageView imge;
public MyViewHolder(View itemView) {
super(itemView);
text1 = (TextView) itemView.findViewById(R.id.texty);
imge = (ImageView) itemView.findViewById(R.id.ivy);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
notifyItemChanged(selectedPos);
selectedPos = getAdapterPosition();
notifyItemChanged(selectedPos);
}
});
}
}
@Override
public int getItemCount() {
return data.size();
}
}
从您的对话框中,您可以调用 getActivity() 来访问启动对话框的活动。 然后通过使用您的活动类名称强制转换 getActivity(),您可以访问受保护的方法并设置数据。
class MyActivity extends Activity {
private Listen selectedListen;
...
protected void setDataFromMyDialog(Listen listen) {
this.selectedListen = listen;
}
...
}
public class DiaFragment extends DialogFragment {
...
protected ListAdapter listAdapter;
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
listAdapter = new ListAdapter(getContext(),getData());
...
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setPositiveButton("OK", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
((MyActivity)getActivity()).setDataFromMyDialog(listAdapter.getSelectedData());
dismiss(); // close dialog
}
});
return super.onCreateDialog(savedInstanceState);
}
}
public class ListAdapter extends RecyclerView.Adapter<ListAdapter.MyViewHolder> {
...
public Listen getSelectedData() {
return data.get(selectedPos);
}
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.