Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在Cards recylerView中获取Onclick按钮值_Android_Android Recyclerview_Cardslib - Fatal编程技术网

Android 如何在Cards recylerView中获取Onclick按钮值

Android 如何在Cards recylerView中获取Onclick按钮值,android,android-recyclerview,cardslib,Android,Android Recyclerview,Cardslib,它显示空对象错误。 当我获取卡RecylerView上的按钮值时 Process: com.softedge.visioneering.tfd, PID: 9884 java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference

它显示空对象错误。 当我获取卡RecylerView上的按钮值时

Process: com.softedge.visioneering.tfd, PID: 9884
                  java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
                      at com.softedge.visioneering.tfd.adapters.MyOrdersAdapter$MyOrdersViewHolder$1.onClick(MyOrdersAdapter.java:138)
                      at android.view.View.performClick(View.java:5609)

This Is My Adapter and Button Code:

public class MyOrdersViewHolder extends RecyclerView.ViewHolder {

        public TextView txtOrderDescription, txtOrderQuantity, txtOrderStatus, txtOrderDate, txtExpectedDate, txtCreatedBy,txtOrderStatus_Per;
String check;
        public Button update_btwn;
        public MyOrdersViewHolder(View convertView) {
            super(convertView);
            update_btwn=(Button) convertView.findViewById(R.id.status_update_button);

            final FragmentManager fragmentManager = ((FragmentActivity) context).getSupportFragmentManager();

            update_btwn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                     id = (Integer) update_btwn.getTag();

                   fragmentManager.beginTransaction().replace(R.id.container, new Status_update_Fragment().newInstance()).addToBackStack(" ").commit();
                    //((FragmentActivity) context).getSupportFragmentManager().beginTransaction().
                    // remove(((FragmentActivity) context).getSupportFragmentManager().findFragmentById(R.id.container)).commit();

                }

            });
我想对按钮执行一个操作。
Cards RecylerView中的哪个位置

您在按钮上设置了标签吗

Process: com.softedge.visioneering.tfd, PID: 9884
                  java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference
                      at com.softedge.visioneering.tfd.adapters.MyOrdersAdapter$MyOrdersViewHolder$1.onClick(MyOrdersAdapter.java:138)
                      at android.view.View.performClick(View.java:5609)

This Is My Adapter and Button Code:

public class MyOrdersViewHolder extends RecyclerView.ViewHolder {

        public TextView txtOrderDescription, txtOrderQuantity, txtOrderStatus, txtOrderDate, txtExpectedDate, txtCreatedBy,txtOrderStatus_Per;
String check;
        public Button update_btwn;
        public MyOrdersViewHolder(View convertView) {
            super(convertView);
            update_btwn=(Button) convertView.findViewById(R.id.status_update_button);

            final FragmentManager fragmentManager = ((FragmentActivity) context).getSupportFragmentManager();

            update_btwn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                     id = (Integer) update_btwn.getTag();

                   fragmentManager.beginTransaction().replace(R.id.container, new Status_update_Fragment().newInstance()).addToBackStack(" ").commit();
                    //((FragmentActivity) context).getSupportFragmentManager().beginTransaction().
                    // remove(((FragmentActivity) context).getSupportFragmentManager().findFragmentById(R.id.container)).commit();

                }

            });
您可以调用
.setTag()
或在xml
android:tag=“”
中调用

另外,您不应该在视图持有者的构造函数中设置click listener,而应该在
onBindViewHolder
中进行设置

  • 在适配器的
    onBindViewHolder
    方法中使用
    setTag()

    @Override
    public void onBindViewHolder(myViewHolder viewHolder, int position) {
        viewHolder.mCardView.setTag(position);
    }
    
  • 其中,
    mCardView
    myViewHolder
    类中定义

    private class myViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
               public View mCardView;
    
               public myViewHolder(View view) {
                   super(view);
                   mCardView = (CardView) view.findViewById(R.id.card_view);
    
                   mCardView.setOnClickListener(this);
               }
           }
    
  • OnClickListener
    实现中使用
    getTag()

    @Override
    public void onClick(View view) {
            int position = (int) view.getTag();           
    
        //display toast with position of cardview in recyclerview list upon click
        Toast.makeText(view.getContext(),Integer.toString(position),Toast.LENGTH_SHORT).show();
    }
    

  • 你需要在得到它之前设置标签。我们如何做请告诉我只是想知道在card recylerView
    update\u btwn.setTag(“uniqueId/name”)
    中按下哪个按钮,就像这个标签一样,点击一下就得到那个标签