[英]How a item in recycler view is selected and get the item position to my activity
I created a custom dialogfragment it consists of a recyclerview and a button, when I click on a item it is selected,it should highlighted and when clicking on button I want the particular item position or data of particular item get to my main activity.我创建了一个自定义对话框片段,它由一个 recyclerview 和一个按钮组成,当我单击它被选中的项目时,它应该突出显示,当单击按钮时,我希望特定项目的位置或特定项目的数据进入我的主要活动。 I tried with different code but not getting it, referred different answers and tried.我尝试了不同的代码但没有得到它,引用了不同的答案并尝试了。 please help me.请帮我。
Thanks in advance.提前致谢。
DialogFragment:对话框片段:
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;
}
}
recycleview adapter:回收视图适配器:
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();
}
}
From your Dialog, you can call getActivity() to access to the activity who launch the Dialog.从您的对话框中,您可以调用 getActivity() 来访问启动对话框的活动。 Then by cast getActivity() with your activity class name, you can access to a protected method and set data.然后通过使用您的活动类名称强制转换 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.