gpt4 book ai didi

java - 尝试跟踪使用 CheckBox 的标记项目?

转载 作者:行者123 更新时间:2023-12-02 11:34:04 25 4
gpt4 key购买 nike

我希望将选中的项目放入列表或类似的列表中,但我不具备验证哪些项目具有复选标记的知识或理解。使用我目前的代码,这些项目成功地从 SQLite 数据库的结果中显示出来,并且可以直观地接收复选标记。据我所知,我认为这个过程需要某种监听器。我确实读到,“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>&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="\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>

再次感谢。

最佳答案

在您的适配器中尝试此代码,希望对您有帮助

//?????????????????????????????????????????????????????????????????????????
@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() ) );

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

关于java - 尝试跟踪使用 CheckBox 的标记项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49081862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com