#java #android #arraylist
#java #Android #arraylist
Вопрос:
Я столкнулся с проблемой, когда я пытаюсь передать некоторую информацию другому действию, но arraylist, который я использую для хранения данных, возвращает null для уникального идентификатора, который я использую для определения каждой записи arraylist.
Это класс:
import java.util.ArrayList;
public class NutritionLessons {
public NutritionLessons(String lessonName, String lessonCode, String lessonCategory, String lessonContent){
this.lessonName = lessonName;
this.lessonCode = lessonCode;
this.lessonCategory = lessonCategory;
this.lessonContent = lessonContent;
}
private String lessonName;
private String lessonCode;
private String lessonCategory;
private String lessonContent;
public String getLessonName() {
return lessonName;
}
public void setLessonName(String lessonName) {
this.lessonName = lessonName;
}
public String getLessonCode() {
return lessonCode;
}
public void setLessonCode(String lessonCode) {
this.lessonCode = lessonCode;
}
public String getLessonCategory() {
return lessonCategory;
}
public void setLessonCategory(String lessonCategory) {
this.lessonCategory = lessonCategory;
}
public String getLessonContent() {
return lessonContent;
}
public void setLessonContent(String lessonContent) {
this.lessonContent = lessonContent;
}
Это arraylist в классе
public static ArrayList<NutritionLessons> getLessons(){
ArrayList<NutritionLessons> lessons = new ArrayList<>();
lessons.add(new NutritionLessons("Basic Food Groups", "eee", "Nutrition Essentials",
"blah"));
lessons.add(new NutritionLessons("Food", "abc", "abc", "abc"));
return lessons;
}
И это цикл для каждого, который я использую, чтобы вернуть информацию об уроке в другое действие
public static NutritionLessons getLessons(String lessonCode){ //lessonCode: null
ArrayList<NutritionLessons> lessons = NutritionLessons.getLessons();
for(final NutritionLessons lesson : lessons){
if(lesson.getLessonCode().equals(lessonCode)){
return lesson;
}
}
return lessons.get(lessons.size()-1);
}
В нем говорится, что lessonCode возвращает значение null при передаче, и я не уверен, почему, любая помощь была бы очень признательна!
РЕДАКТИРОВАТЬ: прикрепление мест, которые я назвал getLesson(String lessonCode) — идея состоит в том, чтобы иметь информацию в arraylist в представлении recycler и последующее действие с lessonContent
Код RecyclerView:
public class nutritionLessonsList extends AppCompatActivity {
RecyclerView mRecyclerView2;
private nutritionLessonsAdapter mAdapter2;
private RecyclerView.LayoutManager layoutManager2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nutrition_lessons_list);
mRecyclerView2 = findViewById(R.id.recyclerView2);
mRecyclerView2.setHasFixedSize(true);
layoutManager2 = new LinearLayoutManager(this);
mRecyclerView2.setLayoutManager(layoutManager2);
nutritionLessonsAdapter.Listener listener = new nutritionLessonsAdapter.Listener(){
@Override
public void onClick(View view, String lessonCode) {
launchDetailActivity(lessonCode);
}
};
mAdapter2 = new nutritionLessonsAdapter(NutritionLessons.getLessons(), listener);
mRecyclerView2.setAdapter(mAdapter2);
}
private void launchDetailActivity(String message){
Intent intent = new Intent(nutritionLessonsList.this, nutritionLessonPage.class);
intent.putExtra(nutritionLessonPage.INTENT_MESSAGE, message);
startActivity(intent);
}
}
Код страницы последующего урока
public class nutritionLessonPage extends AppCompatActivity {
public static final String INTENT_MESSAGE = "au.edu.unsw.infs3634.gamifiedlearning.intent_message";
TextView mLessonName;
TextView mLesson;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_nutrition_lesson_page);
Intent intent = getIntent();
String lessonCode = intent.getStringExtra(INTENT_MESSAGE);
final NutritionLessons nutritionLessons = NutritionLessons.getLessons(lessonCode);
// //Instantiating the view objects
mLessonName = findViewById(R.id.tvLessonName2);
mLesson = findViewById(R.id.tvLesson);
// //Set the content value
mLessonName.setText(nutritionLessons.getLessonName());
mLesson.setText(nutritionLessons.getLessonContent());
}
}
Я хочу добавить, что, когда я просматриваю recyclerview на странице урока, передается только последний элемент в массиве (т. е. lessons.add(новые уроки питания («Еда», «abc», «abc», «abc»));) независимо от того, какую строку RecyclerView я нажимаю
Комментарии:
1. «В нем говорится, что lessonCode возвращает значение null при передаче» — что именно вы имеете в виду под этим? Вы имеете в виду, что параметр to
getLessons
имеет значение null? Если это так, проблема будет в коде, вызывающем этот метод, который вы нам не показали.2. Вы говорите, что аргумент метода
lessonCode
равен null ?3. Привет, ребята, спасибо за ответ — извините, я не был ясен раньше — я отредактировал его, чтобы показать, где отладчик говорит, что код возвращает null. Мне кажется, что код урока из arraylists не передается в идентифицируемый цикл для каждого цикла, но я не совсем уверен @ADM
4. извините, если это глупый вопрос, я все еще пытаюсь изучить это, и поэтому я не слишком опытен
5.
getLessons(String lessonCode)
невозможно вернуть значение null, потому что u обработал оба случая. Как и куда вы звонитеgetLessons(String lessonCode)
? добавьте его с вопросом. Помимо этого, вам действительно следует избегать вызова метода одного действия из другого, есть лучшие способы сделать это. Поскольку она статична, на данный момент она работает нормально
Ответ №1:
Это касается вашего последнего утверждения о том, что «независимо от того, какую строку RecyclerView я нажимаю»
Это потому, что lessonCode, который вы передаете при вызове getLessons(), отличается и отсутствует в вашем arraylist, и вы обработали этот случай, когда lessonCode не совпадает, а затем возвращает последний элемент —
return lessons.get(lessons.size()-1);
И последний элемент в вашем списке — это —
new NutritionLessons("Food", "abc", "abc", "abc")
Надеюсь, я правильно понял или поправьте меня, если я неправильно понял ваш вопрос.