试图跟踪使用CheckBox的标记物品?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了试图跟踪使用CheckBox的标记物品?相关的知识,希望对你有一定的参考价值。

我希望将已检查的项目放入列表或类似内容,但我没有知识或理解来验证哪些项目具有复选标记。使用我现在的代码,项目可以从SQLite数据库的结果中成功显示,并且可以直观地接收复选标记。据我所知,我认为这个过程需要某种监听器。我确实读到“CompoundButton.OnCheckedChangeListener”可能在与CheckBox结合使用时在适配器内部工作,但我遇到了修复它的麻烦。

感谢您的时间。

term_course selection_activity.Java :

public class Term_CourseSelection_Activity extends AppCompatActivity implements
        Term_CourseSelection_RecyclerView_Adapter.ItemClickListener {

    private Button saveButton;
    private Button cancelButton;

    Database_Handling databaseHandling;
    List< CourseData > coursesArrayList;

    RecyclerView recyclerView;
    Term_CourseSelection_RecyclerView_Adapter adapter;


    @Override
    protected void onCreate( Bundle savedInstanceState ) {

        super.onCreate( savedInstanceState );
        setContentView( R.layout.activity_term_courseselection );


        //++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        databaseHandling = new Database_Handling( this );
        coursesArrayList = databaseHandling.getAllCourses();

        if ( coursesArrayList.isEmpty() ) {

            CourseData courseDataBeginning = new CourseData();
            databaseHandling.addCourseData( courseDataBeginning );

        }
        //++++++++++++++++++++++++++++++++++++++++++++++++++++++++


        getSupportActionBar().setTitle( "Choose the Courses for This Term" );

        //The "back" button, which seems bugged right now for this Activity, comes back automatically if the below line is not set.
        getSupportActionBar().setDisplayHomeAsUpEnabled( false );


        saveButton = findViewById( R.id.saveButtonXML );

        saveButton.setOnClickListener( new View.OnClickListener() {

            @Override
            public void onClick( View view ) {

                String result = "Blargh!!!";

                Intent returnIntent = new Intent();
                returnIntent.putExtra( "result", result );
                setResult( Activity.RESULT_OK, returnIntent );

                finish();

            }
        });


        cancelButton = findViewById( R.id.cancelButtonXML );

        cancelButton.setOnClickListener( new View.OnClickListener() {

            @Override
            public void onClick( View view ) {

                Intent returnIntent = new Intent();
                setResult( Activity.RESULT_CANCELED, returnIntent );

                finish();

            }
        });


        recyclerView = findViewById( R.id.courseselection_recyclerView_Array_in_XML );

        LinearLayoutManager linearLayoutManager = new LinearLayoutManager( this );


        //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
        DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(
                recyclerView.getContext(), linearLayoutManager.getOrientation() );

        recyclerView.addItemDecoration( dividerItemDecoration );
        recyclerView.setLayoutManager( linearLayoutManager );
        //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


        adapter = new Term_CourseSelection_RecyclerView_Adapter( this, coursesArrayList );
        adapter.setClickListener( this );
        recyclerView.setAdapter( adapter );

    }


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

        //TODO  ONCE THE CHECKBOX STUFF IS PUT IN, THIS METHOD WILL NEED TO BE FILLED.

        //TODO  I AM NOT SURE HOW TO ENABLE A CHECKBOX FROM THIS METHOD.

    }


}

term_course selection_recycler view_adapter.Java :

public class Term_CourseSelection_RecyclerView_Adapter extends
        RecyclerView.Adapter< Term_CourseSelection_RecyclerView_Adapter.ViewHolder_Test > {

    private List< CourseData > dataList = Collections.emptyList();
    private LayoutInflater layoutInflater;
    private Term_CourseSelection_RecyclerView_Adapter.ItemClickListener itemClickListener;


    public Term_CourseSelection_RecyclerView_Adapter( Context context, List< CourseData > data ) {

        this.layoutInflater = LayoutInflater.from( context );
        this.dataList = data;

    }


    @Override
    public Term_CourseSelection_RecyclerView_Adapter.ViewHolder_Test onCreateViewHolder(
            ViewGroup parent, int viewType ) {

        View view = layoutInflater.inflate( R.layout.recyclerview_row_courseselection, parent,
                false );

        Term_CourseSelection_RecyclerView_Adapter.ViewHolder_Test viewHolderTest =
                new Term_CourseSelection_RecyclerView_Adapter.ViewHolder_Test( view );

        return viewHolderTest;

    }


    //?????????????????????????????????????????????????????????????????????????
    @Override
    public void onBindViewHolder( Term_CourseSelection_RecyclerView_Adapter.ViewHolder_Test holder, int arrayPosition ) {

        CourseData courseData_Array_Entry = dataList.get( arrayPosition );


        //TODO  CHECKBOX STUFF GOES HERE.

        //This makes all the checkboxes checked!!!
        //holder.checkBox.setChecked( true );


        //This allows the text to be displayed.  "html.fromHtml()" was added
        //to support HTML tags like "<big></big>", "<small></small>", and
        //"<bold></bold>".
        holder.textView.setText( Html.fromHtml( courseData_Array_Entry.toString() ) );

    }
    //?????????????????????????????????????????????????????????????????????????


    // total number of rows
    @Override
    public int getItemCount() {

        return dataList.size();

    }


    // convenience method for getting data at click position
    public CourseData getItem( int id ) {

        return dataList.get( id );

    }


    // allows clicks events to be caught
    public void setClickListener(
            Term_CourseSelection_RecyclerView_Adapter.ItemClickListener itemClickListener ) {

        this.itemClickListener = itemClickListener;

    }


    // parent activity will implement this method to respond to click events
    public interface ItemClickListener {

        void onItemClick( View view, int position );

    }


    // stores and recycles views as they are scrolled off screen
    //*********************************************************************************************
    public class ViewHolder_Test extends RecyclerView.ViewHolder implements View.OnClickListener {

        public TextView textView;
        public CheckBox checkBox;


        public ViewHolder_Test( View itemView ) {

            super( itemView );

            checkBox = itemView.findViewById( R.id.courseselection_checkbox_XML );
            textView = itemView.findViewById( R.id.courseselection_entryName_Through_XML );

            itemView.setOnClickListener( this );

        }

        @Override
        public void onClick( View view ) {

            if ( itemClickListener != null ) {

                itemClickListener.onItemClick( view, getAdapterPosition() );

            }

        }
    }
    //*********************************************************************************************

}

course data.Java :

public class CourseData implements Parcelable {

    private int courseID = 1;
    private String courseName = "Un-named Course";
    private String startingDate = "No starting date set.";
    private String endingDate = "No ending date set.";


    //Just here to satisfy the minimum.
    CourseData() {
    }


    public CourseData( int courseID, String courseName, String startingDate, String endingDate ) {

        this.courseID = courseID;
        this.courseName = courseName;
        this.startingDate = startingDate;
        this.endingDate = endingDate;

    }


    //Constructor for the "Parcelable" implementation.
    public CourseData( Parcel in ) {

        courseID = in.readInt();
        courseName = in.readString();
        startingDate = in.readString();
        endingDate = in.readString();

    }


    //Basic required thing.
    public static final Creator<CourseData> CREATOR = new Creator<CourseData>() {

        @Override
        public CourseData createFromParcel( Parcel in ) {

            return new CourseData( in );

        }

        @Override
        public CourseData[] newArray( int size ) {

            return new CourseData[ size ];

        }
    };


    @Override
    public int describeContents() {

        return 0;

    }


    //For sending out the information.
    @Override
    public void writeToParcel( Parcel out, int i ) {

        out.writeInt( courseID );
        out.writeString( courseName );
        out.writeString( startingDate );
        out.writeString( endingDate );

    }


    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    public String getCourseName() { return courseName; }

    public void setCourseName(String courseName) { this.courseName = courseName; }

    public String getStartingDate() { return startingDate; }

    public void setStartingDate( String startingDate ) {
        this.startingDate = startingDate;
    }

    public String getEndingDate() {
        return endingDate;
    }

    public void setEndingDate( String endingDate ) {
        this.endingDate = endingDate;
    }

    public int getCourseID() { return courseID; }

    public void setCourseID(int courseID) { this.courseID = courseID; }


    @Override
    public String toString() {

        return "<b>" + courseName + "</b> "
                + "<br><small>&nbsp &nbsp &nbsp &nbsp &nbsp <i>Starting Date: </i>"
                + " &nbsp " + startingDate + "</small></br>"
                + "<br><small>&nbsp &nbsp &nbsp &nbsp &nbsp <i>Ending Date: </i> "
                + " &nbsp " + endingDate + "</small></br>";

    }
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

}

activity_term_courseselection.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.weslange.Term_Scheduling.Term_CourseSelection_Activity"
    >

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:orientation="vertical"
        android:gravity="center_horizontal"
        >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="
"
            />

        <Button
            android:id="@+id/saveButtonXML"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Save Changes and Return to the Term's Details"
            />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="
"
            />

        <Button
            android:id="@+id/cancelButtonXML"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Cancel and Return to the Term's Details"
            />

    </LinearLayout>



    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"

        android:scrollbarAlwaysDrawVerticalTrack="true"
        android:scrollbars="vertical"
        >


        <android.support.v7.widget.RecyclerView
            android:id="@+id/courseselection_recyclerView_Array_in_XML"
            android:layout_width="match_parent"
            android:layout_height="match_parent"

            android:background="?android:attr/selectableItemBackground"
            android:focusable="true"
            android:clickable="true"
            />

    </LinearLayout>

</LinearLayout>

recyclerview_row_courseselection.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="10dp"
    >

    <CheckBox
        android:id="@+id/courseselection_checkbox_XML"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.1"
        />


    <TextView
        android:id="@+id/courseselection_entryName_Through_XML"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="0.9"
        android:textSize="20sp"
        />

</LinearLayout>

再次感谢。

答案

在你的适配器中试试这个代码,希望它能帮到你

//?????????????????????????????????????????????????????????????????????????
    @Override
    public void onBindViewHolder( Term_CourseSelection_RecyclerView_Adapter.ViewHolder_Test holder, int arrayPosition ) {

        CourseData courseData_Array_Entry = dataList.get( arrayPosition );


        //TODO  CHECKBOX STUFF GOES HERE.

        holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                // do what you want when checkbox checked

                if(holder.checkBox.isChecked())
                    //holder.checkBox.setChecked( false );
                else
                //holder.checkBox.setChecked( true );
            }
        });

        // verify if checkbox is checked..
        if(holder.checkBox.isChecked()) {

            // add courseData_Array_Entry into list or somewhere else here.

        }

        //This makes all the checkboxes checked!!!
        //holder.checkBox.setChecked( true );


        //This allows the text to be displayed.  "Html.fromHtml()" was added
        //to support HTML tags like "<big></big>", "<small></small>", and
        //"<bold></bold>".
        holder.textView.setText( Html.fromHtml( courseData_Array_Entry.toString() ) );

    }
    //?????????????????????????????????????????????????????????????????????????

以上是关于试图跟踪使用CheckBox的标记物品?的主要内容,如果未能解决你的问题,请参考以下文章

CSS 显示代码片段:使用PRE标记包裹长行

在 Firebase 中禁用自动活动跟踪

jsp <input type="checkbox">标记的空指针异常

重力表单 - 添加自定义事件不通过Google跟踪代码管理器触发

php 一个短代码片段准备在WooCommerce Thank You页面上输出货件跟踪UI。

如何使用 Firebase 分析跟踪 android 片段