首页 > 解决方案 > 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);
        }
    }


}

如有需要,将尽快提供任何其他信息。

标签: javaandroid-recyclerviewandroid-cardview

解决方案


推荐阅读