我希望将已检查的项目放入列表或类似内容,但我没有知识或理解来验证哪些项目具有复选标记。使用我现在的代码,项目可以从SQLite数据库的结果中成功显示,并且可以直观地接收复选标记。据我所知,我认为该过程需要某种 Listener 。我确实读过" CompoundButton.OnCheckedChangeListener
"当与 CheckBox 结合使用时,它可能在 Adapter 中工作,但是我在修复它时遇到了麻烦。
感谢您的时间。
Term_CourseSelection_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_CourseSelection_RecyclerView_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() );
}
}
}
//*********************************************************************************************
}
CourseData.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>          <i>Starting Date: </i>"
+ "   " + startingDate + "</small></br>"
+ "<br><small>          <i>Ending Date: </i> "
+ "   " + 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="\n"
/>
<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="\n"
/>
<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>
再次感谢。