【发布时间】:2022-01-25 19:45:19
【问题描述】:
我正在制作一个应用程序,您可以在其中跟踪自己的成绩。目前,我正在开发一个添加主题的系统。所以,我想在 RecyclerView 上显示主题。所以,我有一个添加主题的活动,它获取主题的名称,将其存储在数组列表中,将数组列表发送到 RecyclerView 适配器并将主题名称显示为一个项目。
我面临的问题是,我似乎无法使用 Intent 传输 arraylist 的值。我在适配器中遇到错误,特别是当我尝试使用名为 getIntent() 的命令时。
这是 RecyclerAdapter.java 文件中的代码:
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class recyclerAdapter extends RecyclerView.Adapter<recyclerAdapter.MyViewHolder> {
private ArrayList<String> subjectList;
public recyclerAdapter(ArrayList<String> subjectList){
this.subjectList = subjectList;
}
public class MyViewHolder extends RecyclerView.ViewHolder{
private TextView subjectName;
public MyViewHolder(final View view){
super(view);
subjectName = view.findViewById(R.id.txtSubjectName);
Intent addedSubject = getIntent(); //I get the error in this line, specifically getIntent()
subjectList = addedSubject.getStringArrayListExtra("Subject");
}
}
@NonNull
@Override
public recyclerAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View subjectView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_subjects, parent, false);
return new MyViewHolder(subjectView);
}
@Override
public void onBindViewHolder(@NonNull recyclerAdapter.MyViewHolder holder, int position) {
String subject = subjectList.get(position);
holder.subjectName.setText(subject);
}
@Override
public int getItemCount() {
return subjectList.size();
}
}
这是您在其中添加主题名称的活动中的代码:
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.DefaultItemAnimator;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.EditText;
import android.widget.Toast;
import java.util.ArrayList;
public class addSubject extends AppCompatActivity {
private ArrayList<Subjects> subjectList;
private boolean subjectAdded = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getSupportActionBar().hide();
setContentView(R.layout.activity_add_subject);
subjectList = new ArrayList<>();
}
public void addSubject (View view){
EditText editSubjectName = findViewById(R.id.editSubjectName);
Intent backToMain = new Intent(this, MainActivity.class);
Intent toAdapter = new Intent(this, recyclerAdapter.class);
String subjectName = editSubjectName.getText().toString();
if (!subjectName.equals("")){
subjectList.add(new Subjects(subjectName));
toAdapter.putExtra("Subject", subjectList);
startActivity(backToMain);
}
else
Toast.makeText(getApplicationContext(),"Invalid values, try again",Toast.LENGTH_SHORT).show();
}
【问题讨论】:
-
getIntent()是Activitys 方法,在适配器中不可用。如果您想将此Intent传递给适配器,则将其传递给构造函数 -
@snachmsm 我该怎么做?
-
显示如何启动适配器
-
我遵循了一个教程,它说要在主活动中使用它:
recyclerAdapter adapter = new recyclerAdapter(subjectList); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext()); rvSubject.setLayoutManager(layoutManager); rvSubject.setItemAnimator(new DefaultItemAnimator()); rvSubject.setAdapter(adapter); -
跟随@Narendra_Nath 的回答,简而言之,
new Intent(this, recyclerAdapter.class)行没有意义,也不会直接将数据分发给recyclerAdapter。除此之外,它甚至没有被进一步使用,除了为它设置一些数据之外,另一个Intent正在由startActivity运行。阅读Intents,如何使用它们在上下文扩展类之间传递数据(适配器不扩展Context)
标签: java android android-recyclerview