简体   繁体   English

如何选择回收商视图中的项目并将项目位置获取到我的活动

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM