繁体   English   中英

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

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

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