java - Recycler List,CardView 到 Tab 活动中的新片段
问题描述
这是针对我大学的一个项目,该项目将在 4 天后到期。所以我的问题是我无法弄清楚如何设置正确的 onclick 方法并将数据传输到我的 RecycleView、CardView。我有一个 CodeActivity,用户在其中输入代码以访问特定课程。该课程然后显示在 RecycleCourses 内的 RecycleView 中加载的卡片中。
我需要的是,当用户点击卡片时,它会将他们带到 TabActivity(CourseTab(女巫现在是 Anroid Studio 的标准选项卡式活动)并显示与点击的卡片相关联的片段。或者将它们带到活动中(不同的活动每门课程)与点击的卡片相关联。
我尝试了很多方法,但我猜是我缺乏知识。感谢您对解决这个难题的任何帮助。
CodeActivity.java(基本活动)
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.mikepenz.materialdrawer.AccountHeader;
import com.mikepenz.materialdrawer.AccountHeaderBuilder;
import com.mikepenz.materialdrawer.Drawer;
import com.mikepenz.materialdrawer.DrawerBuilder;
import com.mikepenz.materialdrawer.model.DividerDrawerItem;
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem;
import com.mikepenz.materialdrawer.model.ProfileDrawerItem;
import com.mikepenz.materialdrawer.model.SecondaryDrawerItem;
import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem;
import com.mikepenz.materialdrawer.model.interfaces.IProfile;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import android.os.FileObserver;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class CodeActivity extends AppCompatActivity {
private String file = "courseCodes.txt";
String course1 = "Course1";String course2 = "LYP4222U";String course3 = "M4QB94UC";String course4 = "L4S3EDLP";
Button accsess;
EditText code;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_code);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
code = findViewById(R.id.etCode);
accsess = findViewById(R.id.buttonac);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Enter the code that the instructor gave you", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
PrimaryDrawerItem item1 = new PrimaryDrawerItem().withIdentifier(1).withName("Home");
SecondaryDrawerItem item2 = new SecondaryDrawerItem().withIdentifier(2).withName("My courses")
.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
@Override
public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
Intent in = new Intent(CodeActivity.this,RecycleCourses.class);
startActivity(in);
return true;
}
});
//create the drawer and remember the `Drawer` result object
DatabaseClass userDatabase = DatabaseClass.getDatabase(getApplicationContext());
AccountHeader headerResult = new AccountHeaderBuilder()
.withActivity(this)
.withHeaderBackground(R.drawable.profback)
.addProfiles(
new ProfileDrawerItem().withName("Mike Penz").withEmail("mikepenz@gmail.com").withIcon(getResources().getDrawable(R.drawable.profile))
)
.withOnAccountHeaderListener(new AccountHeader.OnAccountHeaderListener() {
@Override
public boolean onProfileChanged(View view, IProfile profile, boolean currentProfile) {
return false;
}
})
.build();
Drawer result = new DrawerBuilder()
.withActivity(this)
.withToolbar(toolbar).withAccountHeader(headerResult)
.addDrawerItems(
item1,
new DividerDrawerItem(),
item2
)
.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
@Override
public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
return true;
}
})
.build();
accsess.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!code.getText().toString().isEmpty()){
if (code.getText().toString().equals("Course1")) {
Toast.makeText(CodeActivity.this, "course1", Toast.LENGTH_SHORT).show();
} else if (code.getText().toString().equals("Course2")) {
Toast.makeText(CodeActivity.this, "course2", Toast.LENGTH_SHORT).show();
} else if (code.getText().toString().equals("Course3")){
Toast.makeText(CodeActivity.this, "course3", Toast.LENGTH_SHORT).show();
} else if (code.getText().toString().equals("Course4")) {
Toast.makeText(CodeActivity.this, "course4", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(CodeActivity.this, "Invalid Code", Toast.LENGTH_SHORT).show();
}
}else{
Toast.makeText(CodeActivity.this, "Cannot be empty", Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.Logout) {
Intent in = new Intent(CodeActivity.this, LoginActivity.class);
SharedPreferences preferences = getSharedPreferences("switch", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("remember", "false");
editor.apply();
startActivity(in);
}
return super.onOptionsItemSelected(item);
}
}
RecycleCourses.java
--------------------
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.mikepenz.materialdrawer.AccountHeader;
import com.mikepenz.materialdrawer.AccountHeaderBuilder;
import com.mikepenz.materialdrawer.Drawer;
import com.mikepenz.materialdrawer.DrawerBuilder;
import com.mikepenz.materialdrawer.model.DividerDrawerItem;
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem;
import com.mikepenz.materialdrawer.model.ProfileDrawerItem;
import com.mikepenz.materialdrawer.model.SecondaryDrawerItem;
import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem;
import com.mikepenz.materialdrawer.model.interfaces.IProfile;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import java.util.ArrayList;
public class RecycleCourses extends AppCompatActivity {
private RecyclerView courseRV;
// Arraylist for storing data
private ArrayList<CourseModel> courseModelArrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycle_courses);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
PrimaryDrawerItem item1 = new PrimaryDrawerItem().withIdentifier(1).withName("Home");
SecondaryDrawerItem item2 = new SecondaryDrawerItem().withIdentifier(2).withName("My courses")
.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
@Override
public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
Intent in = new Intent(RecycleCourses.this,RecycleCourses.class);
startActivity(in);
return true;
}
});
//create the drawer and remember the `Drawer` result object
DatabaseClass userDatabase = DatabaseClass.getDatabase(getApplicationContext());
AccountHeader headerResult = new AccountHeaderBuilder()
.withActivity(this)
.withHeaderBackground(R.drawable.profback)
.addProfiles(
new ProfileDrawerItem().withName("Mike Penz").withEmail("mikepenz@gmail.com").withIcon(getResources().getDrawable(R.drawable.profile))
)
.withOnAccountHeaderListener(new AccountHeader.OnAccountHeaderListener() {
@Override
public boolean onProfileChanged(View view, IProfile profile, boolean currentProfile) {
return false;
}
})
.build();
Drawer result = new DrawerBuilder()
.withActivity(this)
.withToolbar(toolbar).withAccountHeader(headerResult)
.addDrawerItems(
item1,
new DividerDrawerItem(),
item2
)
.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
@Override
public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
return true;
}
})
.build();
courseRV = findViewById(R.id.idRVCourse);
// here we have created new array list and added data to it.
courseModelArrayList = new ArrayList<>();
courseModelArrayList.add(new CourseModel("Web Development", "Learn how to make Websites and build your own network with the master himself:\nTobey Maguire", R.drawable.webdev));
courseModelArrayList.add(new CourseModel("VR Development", "Virtual Reality guru by the name of Neo will teach you everything you need to know\nabout the Matrix! '", R.drawable.vrdev));
courseModelArrayList.add(new CourseModel("C++ Starter Pack", "Gerald that hides the Pain will teach you everything you need to know to start a career\nHe hides it for a reason... ", R.drawable.cpp));
courseModelArrayList.add(new CourseModel("Android Development", "This is a marvelous derpy cat that made this application!\nStart learning how! " , R.drawable.andrdev));
// we are initializing our adapter class and passing our arraylist to it.
CourseAdapter courseAdapter = new CourseAdapter(this, courseModelArrayList);
// below line is for setting a layout manager for our recycler view.
// here we are creating vertical list so we will provide orientation as vertical
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
// in below two lines we are setting layoutmanager and adapter to our recycler view.
courseRV.setLayoutManager(linearLayoutManager);
courseRV.setAdapter(courseAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.Logout) {
Intent in = new Intent(RecycleCourses.this, LoginActivity.class);
SharedPreferences preferences = getSharedPreferences("switch", MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("remember", "false");
editor.apply();
startActivity(in);
}
return super.onOptionsItemSelected(item);
}
}
CourseModel.java
public class CourseModel {
private String course_name;
private String course_rating;
private int course_image;
// Constructor
public CourseModel(String course_name, String course_description, int course_image) {
this.course_name = course_name;
this.course_rating = course_description;
this.course_image = course_image;
}
// Getter and Setter
public String getCourse_name() {
return course_name;
}
public void setCourse_name(String course_name) {
this.course_name = course_name;
}
public String getCourse_description() {
return course_rating;
}
public void setCourse_description(String course_description) {
this.course_rating = course_description;
}
public int getCourse_image() {
return course_image;
}
public void setCourse_image(int course_image) {
this.course_image = course_image;
}
}
CourseAdapter.java
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class CourseAdapter extends RecyclerView.Adapter<CourseAdapter.Viewholder>{
private Context context;
private ArrayList<CourseModel> courseModelArrayList;
// Constructor
public CourseAdapter(Context context, ArrayList<CourseModel> courseModelArrayList) {
this.context = context;
this.courseModelArrayList = courseModelArrayList;
}
@NonNull
@Override
public CourseAdapter.Viewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
// to inflate the layout for each item of recycler view.
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_recycle_courses, parent, false);
return new Viewholder(view);
}
@Override
public void onBindViewHolder(@NonNull CourseAdapter.Viewholder holder, int position) {
// to set data to textview and imageview of each card layout
CourseModel model = courseModelArrayList.get(position);
holder.courseNameTV.setText(model.getCourse_name());
holder.courseDescriptionTV.setText("" + model.getCourse_description());
holder.courseIV.setImageResource(model.getCourse_image());
}
@Override
public int getItemCount() {
// this method is used for showing number
// of card items in recycler view.
return courseModelArrayList.size();
}
// View holder class for initializing of
// your views such as TextView and Imageview.
public class Viewholder extends RecyclerView.ViewHolder {
private ImageView courseIV;
private TextView courseNameTV, courseDescriptionTV;
public Viewholder(@NonNull View itemView) {
super(itemView);
courseIV = itemView.findViewById(R.id.idIVCourseImage);
courseNameTV = itemView.findViewById(R.id.idTVCourseName);
courseDescriptionTV = itemView.findViewById(R.id.idTVCourseDescription);
}
}
}
如有需要,将尽快提供任何其他信息。
解决方案
推荐阅读
- python - Google Colaboratory 本地主机中没有 tensorflow
- sql - PostgreSQL 获取带有物品的订单
- node.js - DynamoDB 数据模型
- c# - System.DLLNotFoundException 在 Mac 上使用 Xamarin
- java - JavaFX:添加元素的 ObservableArrayList 冻结应用程序
- angular - Angular 6 中包装组件的问题
- python - 用opencv计算多个区域
- angular - 父组件到子组件值的角度未正确传递
- ios - Xcode 10 无效的二进制架构?
- azure - 我们可以将应用服务限制在 Azure 中的特定国家/地区吗?