简体   繁体   English

我如何从recyclerview获取3 textview并将其传递给对话框

[英]How can i get the 3 textview from recyclerview and pass it to dialogbox

Im new to android programming so can you provide me the right code. 我是android编程的新手,所以您可以为我提供正确的代码。 this is my code. 这是我的代码。 the data is from sqlite. 数据来自sqlite。 my problem is . 我的问题是。 How can i get the 3 textview from recyclerview and pass it to dialogbox when clicked? 单击时如何从recyclerview获取3文本视图并将其传递给对话框? i finally made dialogbox but i can get only the position of the item i want to get all of the three textview data. 我终于制作了对话框,但是我只能获取要获取所有三个textview数据的项目的位置。 please help me. 请帮我。

FragmentMeal.java FragmentMeal.java

package inncharge.poy.madrigal.innchargev1.fragments;


import android.app.Dialog;
import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import inncharge.poy.madrigal.innchargev1.R;
import inncharge.poy.madrigal.innchargev1.database.DatabaseHelper;
import inncharge.poy.madrigal.innchargev1.adapters.VivzAdapter;


/**
 * A simple {@link Fragment} subclass.
 * Use the {@link FragmentMeal#newInstance} factory method to
 * create an instance of this fragment.
 */
public class FragmentMeal extends Fragment {

    private DatabaseHelper db;
    private RecyclerView recyclerView;
    private VivzAdapter adapter;


    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;



    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment FragmentMeal.
     */
    // TODO: Rename and change types and number of parameters
    public static FragmentMeal newInstance(String param1, String param2) {
        FragmentMeal fragment = new FragmentMeal();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    public FragmentMeal() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }

        db = new DatabaseHelper(getActivity());

    }



    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View view = inflater.inflate(R.layout.fragment_meal, container, false);
        recyclerView = (RecyclerView) view.findViewById(R.id.mealList);
        adapter = new VivzAdapter(getActivity(),db.getMealData());
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), recyclerView, new ClickListener() {

            @Override


            public void onClick(View view, int postion) {

                final Dialog dialog = new Dialog(getActivity());
                dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
                dialog.setContentView(R.layout.custom_dialog);
                dialog.show();

                final EditText editText = (EditText)dialog.findViewById(R.id.editText_pin);
                Button submitButton = (Button)dialog.findViewById(R.id.submit_button);
                Button cancelButton = (Button)dialog.findViewById(R.id.cancel_button);

                submitButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        String text = editText.getText().toString();
                        Toast.makeText(getActivity(), "Pin submitted is : " + text, Toast.LENGTH_SHORT).show();
                        dialog.cancel();

                    }
                });


                cancelButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        dialog.cancel();

                    }
                });

            }

            @Override
            public void onLongClick(View view, int position) {

                Toast.makeText(getActivity(), "onLongClick" + position, Toast.LENGTH_SHORT).show();

            }
        }));

        return view;
    }

    class RecyclerTouchListener implements RecyclerView.OnItemTouchListener {

        private GestureDetector gestureDetector;
        private ClickListener clickListener;
        public RecyclerTouchListener(Context context, final RecyclerView recyclerView, final ClickListener clickListener){
            Log.d("VIVZ", "constructor invoked ");
            this.clickListener = clickListener;
            gestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener(){

                @Override
                public boolean onSingleTapUp(MotionEvent e) {
                    Log.d("VIVZ","onSingleTapUp " + e);
                    return true;
                }

                @Override
                public void onLongPress(MotionEvent e) {
                    View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
                    if (child != null && clickListener != null){

                        clickListener.onLongClick(child, recyclerView.getChildAdapterPosition(child));

                    }
                    Log.d("VIVZ", "onLongPress " + e);
                }
            });
        }

        @Override
        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {

            View child = rv.findChildViewUnder(e.getX(), e.getY());
            if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)){

                clickListener.onClick(child, rv.getChildAdapterPosition(child));

            }
            return false;

        }

        @Override
        public void onTouchEvent(RecyclerView rv, MotionEvent e) {
            Log.d("VIVZ","onTouchEvent "+ e);
        }

        @Override
        public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

        }
    }

    public static interface ClickListener {

        public void onClick(View arg1, int arg2);
        public void onLongClick(View view, int position);

    }

}

VivzAdapter.java VivzAdapter.java

package inncharge.poy.madrigal.innchargev1.adapters;

import android.content.ClipData;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import java.util.Collections;
import java.util.List;

import inncharge.poy.madrigal.innchargev1.R;
import inncharge.poy.madrigal.innchargev1.fragments.FragmentMeal;
import inncharge.poy.madrigal.innchargev1.pojo.Contact;
import inncharge.poy.madrigal.innchargev1.pojo.Information;

/**
 * Created by Madrigal on 7/18/2015.
 */
public class VivzAdapter extends RecyclerView.Adapter<VivzAdapter.MyViewHolder> {

    private Context context;
    private final LayoutInflater inflater;
    List<Contact> data = Collections.emptyList();

    public VivzAdapter(Context context, List<Contact> data){

        this.context=context;
        inflater = LayoutInflater.from(context);
        this.data=data;

    }

    public void delete(int position){
        data.remove(position);
        notifyItemRemoved(position);
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.custom_row, parent, false);
        Log.d("VIVZ","onCreateHolder called ");
        MyViewHolder holder = new MyViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {

        Contact current = data.get(position);
        Log.d("VIVZ", "onBindViewHolder called " + position);
        holder.itemId.setText(String.valueOf(current.getId()));
        holder.title.setText(current.getName());
        holder.email.setText(current.getEmail());

    }

    @Override
    public int getItemCount() {
        return data.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        public TextView title;
        public TextView email;
        public TextView itemId;


        public MyViewHolder(View itemView) {
            super(itemView);
            title = (TextView) itemView.findViewById(R.id.listTextName);
            email = (TextView) itemView.findViewById(R.id.listTextUname);
            itemId = (TextView) itemView.findViewById(R.id.listTextId);
        }

        @Override
        public void onClick(View v) {


        }

    }

}

Slidenerd makes some great videos, he helped me a lot as well when I started. Slidenerd制作了一些很棒的视频,当我开始时,他也为我提供了很多帮助。

You might want to reconsider what you're trying to do and approach it differently... Why would you want to pass 3 textview from your UI into a dialog? 您可能想重新考虑您要尝试做的事情,并以不同的方式进行处理...为什么要将UI的3个textview传递给对话框? This is going to be painful. 这将是痛苦的。

Seems like you're going to have to extend DialogFragment (i'm assuming that's what you're using for a dialog, maybe an alert?). 似乎您将不得不扩展DialogFragment(我假设这是您用于对话框的内容,也许是警报?)。 Create a static factory method inside the DialogFragment like this... 像这样在DialogFragment内部创建一个静态工厂方法...

public class MyDialog extends DialogFragment {

    private static tv1, tv2, tv3;

    public static MyDialog newInstance(TextView tv1, TextView tv2, TextView tv3){
       MyDialog.tv1 = tv1;
       MyDialog.tv2 = tv2;
       MyDialog.tv3 = tv3;
       return new MyDialog();
    }
}

Once you have this complete, create this dialog fragment inside that onClick method in the ViewHolder class. 完成此操作后,请在ViewHolder类的onClick方法内创建此对话框片段。 Instantiate the DialogFragment by doing this... 通过执行此操作实例化DialogFragment ...

MyDialog.newInstance(title,email,itemId).show(getFragmentManager(),"dialog_tag");

Like i said before, it's seems sloppy and is probably error prone. 就像我之前说过的那样,它看起来很草率,而且很容易出错。 There may be a better way of doing this but this is all I can think of off the top of my head. 也许有更好的方法可以做到这一点,但这就是我想到的全部。 Let me know how it works out for you.. or perhaps revise your question so we can better help you reach a better solution to what you're trying to do. 让我知道它如何为您解决..或者修改您的问题,以便我们可以更好地帮助您找到更好的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 我有一个textview,它从对话框中的选项中获取其文本。 我怎样才能使选择也显示在另一个布局中? - I have a textview that gets its text from a selection of options within a dialogbox. How can I get the selections to also show in another layout? 如何使用 AsyncTask、RecyclerView 和 RecyclerView.Adapter 将手机中的图像获取到 RecyclerView? - How can I use AsyncTask, RecyclerView, and a RecyclerView.Adapter to get images from my phone into my RecyclerView? 我如何从视图而不是Textview获取文本 - How can i get Text from a view, not a Textview 如何使用OnClickListener从TextView中获取值? - How can I get the value from TextView with OnClickListener? 如何从可选TextView获取文本字符串? - How can i get text string from selectable TextView? Android,如何在 OnClick 中从 TextView 获取文本 - Android, How can I get text from TextView in OnClick 如何从RecyclerView Adapter传递给MainActivity的变量? - How can I get a variable from RecyclerView Adapter passed to MainActivity? Android Studio 如何将数据从 recyclerview 传递到下一个活动 textview? JAVA - Android Studio how to pass data from recyclerview to next activity textview? JAVA 如何从一个活动传递int变量值以覆盖另一个活动中的textview - How can I pass an int variable value from one activity to overwrite a textview in another activity 我无法将数据从 Recyclerview 传递到另一个活动 - I can not pass data from Recyclerview to another activity
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM