#java #android #android-fragments #arraylist #textview
#java #Android #android-фрагменты #список массивов #textview
Вопрос:
У меня есть фрагмент, который использует Filereader для чтения и разбора файла .txt во фрагмент и сохранения этих данных в виде пользовательского списка массивов под названием «инструкции». Я хочу отобразить значение каждого индекса списка массивов в текстовом представлении, выполнив итерацию по списку массивов с помощью кнопки вперед или назад. кнопка. Проблема, которую я нахожу, заключается в том, что я не могу увеличить индекс списка массивов, просто увеличив значение i в методе onclick . Мне было интересно, есть ли другой подход.
Вот приведенный ниже код
public class pneumothorax_fr_flashcard_view extends Fragment implements View.OnClickListener {
private static final String TAG = "flashcard view";
fileReader reader = new fileReader(); /* this is the file parser*/
int i = 0;
/*establishing context - this is needed to pass the file into the fragment and parse it as an arraylist */
private Context mContext;
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
mContext = context;
}
@Override
public void onDetach() {
super.onDetach();
mContext = null;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.pneumothorax_flashcard_view,container,false);
/*initialise the ArrayList and load in the parsed file*/
ArrayList <fileReader.InstructionList> instructions = reader.loadFile(mContext,"Pneumothorax_copy.txt");
/*initialise the textview and set the initial string*/
TextView flashcardBox = (TextView) view.findViewById(R.id.flashcardBox);
flashcardBox.setText(instructions.get(i).toString());
/*initialise buttons*/
ImageButton forwardButton = (ImageButton) view.findViewById(R.id.forwardButton);
ImageButton backwardButton = (ImageButton) view.findViewById(R.id.backwardButton);
ImageButton yesButton = (ImageButton) view.findViewById(R.id.yesButton);
ImageButton noButton = (ImageButton) view.findViewById(R.id.noButton);
forwardButton.setOnClickListener(this);
backwardButton.setOnClickListener(this);
yesButton.setOnClickListener(this);
noButton.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.forwardButton:
Toast.makeText(getActivity(), "Next button has been clicked", Toast.LENGTH_SHORT).show();
i ; //WHAT DO I DO HERE???//
break;
case R.id.backwardButton:
Toast.makeText(getActivity(), "Back button has been clicked", Toast.LENGTH_SHORT).show();
break;
case R.id.yesButton:
Toast.makeText(getActivity(), "Yes button has been clicked", Toast.LENGTH_SHORT).show();
break;
case R.id.noButton:
Toast.makeText(getActivity(), "No button has been clicked", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
}
Комментарии:
1. пожалуйста, покажите, как выглядит ‘FileReader’, а также FileReader. Список инструкций
2. На самом деле это не имеет значения, потому что класс просто предоставляет вам список массивов, проблема, с которой я сталкиваюсь, в основном заключается в том, что я думаю о способе итерации, а не о том, что итерация не работает
Ответ №1:
Я бы изменил метод onCreateView:
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.pneumothorax_flashcard_view,container,false);
/*initialise the ArrayList and load in the parsed file*/
ArrayList <fileReader.InstructionList> instructions = reader.loadFile(mContext,"Pneumothorax_copy.txt");
/*initialise the textview and set the initial string*/
TextView flashcardBox = (TextView) view.findViewById(R.id.flashcardBox);
flashcardBox.setText(instructions.get(i).toString());
/*initialise buttons*/
ImageButton forwardButton = (ImageButton) view.findViewById(R.id.forwardButton);
ImageButton backwardButton = (ImageButton) view.findViewById(R.id.backwardButton);
ImageButton yesButton = (ImageButton) view.findViewById(R.id.yesButton);
ImageButton noButton = (ImageButton) view.findViewById(R.id.noButton);
forwardButton.setOnClickListener(v -> {
//add sth to handle i>instructions.length
flashcardBox.setText(instructions.get(i).toString());
});
backwardButton.setOnClickListener(v -> {
i--;
//add sth to handle i<0
flashcardBox.setText(instructions.get(i).toString());
});
yesButton.setOnClickListener(this);
noButton.setOnClickListener(this);
return view;
}
Таким образом, у вас есть доступ к вашему массиву инструкций.
Другим способом добиться желаемого было бы добавить переменную класса, которая содержит инструкции ArrayList
, но если вы используете ее только для отображения значения в TextView
, я бы придерживался первого решения.