Я пытаюсь настроить RecyclerView в течение последних двух дней, и большинство из них работает так, как планировалось. Тем не менее, всякий раз, когда я пытаюсь запустить мое приложение, он выходит из строя со смертельным исключением:
E/AndroidRuntime: FATAL ИСКЛЮЧЕНИЕ: главный процесса: com.mad.exercise5, PID: 16634 android.content.res. Ресурсы $ NotFoundException: Идентификатор ресурса строки # 0x1 на android.content.res.Resources.getText (Resources.java:342) на android.support.v7.widget.ResourcesWrapper.getText (ResourcesWrapper.java:52) на android .widget.TextView.setText (TextView.java:4244) по адресу (...)
Я следующие the slideview tutorials from YouTube, parts 1-4. В контексте учебников RecyclerView настраивается в фрагменте, к которому я еще не вошел. На всякий случай, возникла ошибка при создании RecyclerView в основном действии, я также пробовал следовать a tutorial at StackTips.
В меру моих возможностей, я смог остановить ошибку, закомментировав строку, которая устанавливает диспетчер компоновки (mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
), но ошибка возникает из onBindViewHolder
. В частности, установка текста в TextViews ViewHolder.
Ошибка при запуске и некоторые исследования, я обнаружил множество случаев, когда эта ошибка возникла в других вопросах и проблемах. Однако проблема всегда заключается в том, что пользователь вызывает ресурс, но напрямую ссылается на него как на идентификатор. То есть, они будут использовать 'String string = R.string.string
' вместо 'String string = getString(R.string.string)
'. Я трижды проверил стандартную реализацию ресурсов, и я уверен, что ничего не пропустил. Что касается учебников, которые привели меня к мысли, я правильно создаю свой TextViews с правильной реализацией findViewById
. Контекст основной активности передается при инициализации, поэтому не должно возникать проблем с поиском соответствующих идентификаторов.
Почему я получаю Ресурсы $ NotFoundException, в моем примере приложения RecyclerView? двух соответствующих классов Java заключаются в следующем:
MainActivity.java
public class MainActivity extends AppCompatActivity {
private ArrayList<Train> mTrains;
private TrainAdapter mTrainAdapter;
private RecyclerView mRecyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Create the Recycler View
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mTrains = FillTrainData();
mTrainAdapter = new TrainAdapter(this, mTrains);
mRecyclerView.setAdapter(mTrainAdapter);
}
private ArrayList<Train> FillTrainData()
{
ArrayList<Train> mTempTrainData = new ArrayList<>();
String[] mPlatform = new String[]{"platA", "platB", "platC", "platD"};
String[] mStatus = new String[]{"arrive", "notarrive"};
String[] mDestination = new String[]{"destA", "destB", "destC", "destD"};
String[] mDestinationTime = new String[]{"destA", "destB", "destC", "destD"};
int[] mArrivalTime = new int[]{1,2,3,4};
for(int i = 0; i < 4; i ++)
{
Train mTrain = new Train(mPlatform[i], mArrivalTime[i], mStatus[i%2],
mDestination[i], mDestinationTime[i]);
mTempTrainData.add(mTrain);
}
return mTempTrainData;
}
}
TranAdapter.java
public class TrainAdapter extends RecyclerView.Adapter<TrainAdapter.CustomViewHolder> {
private Context mContext;
private ArrayList<Train> mTrains;
public TrainAdapter(Context context, ArrayList<Train> trains) {
mContext = context;
mTrains = trains;
}
@Override
public CustomViewHolder onCreateViewHolder(ViewGroup parent, int index) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.train_item, null);
CustomViewHolder viewHolder = new CustomViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(CustomViewHolder viewHolder, int position) {
Train currentTrain = mTrains.get(position);
viewHolder.platformText.setText(currentTrain.GetPlatform());
viewHolder.arrivalTimeText.setText(currentTrain.GetArrivalTime());
viewHolder.statusText.setText(currentTrain.GetStatus());
viewHolder.destinationText.setText(currentTrain.GetDestination());
viewHolder.destinationTimeText.setText(currentTrain.GetDestinationTime());
}
@Override
public int getItemCount() {
return (mTrains != null ? mTrains.size() : 0);
}
class CustomViewHolder extends RecyclerView.ViewHolder {
TextView platformText;
TextView arrivalTimeText;
TextView statusText;
TextView destinationText;
TextView destinationTimeText;
public CustomViewHolder(View itemView) {
super(itemView);
platformText =
(TextView)itemView.findViewById(R.id.train_item_platform_text);
arrivalTimeText =
(TextView)itemView.findViewById(R.id.train_item_arrival_time_text);
statusText =
(TextView)itemView.findViewById(R.id.train_item_status_text);
destinationText =
(TextView)itemView.findViewById(R.id.train_item_destination_text);
destinationTimeText =
(TextView)itemView.findViewById(R.id.train_item_destination_time_text);
}
}
}
Я рад предоставить полный код ошибки, если это помогает. Это было значительно долго, поэтому я надеялся, что первые несколько строк предоставят достаточно деталей и избавят меня от наводнения вопросом массивным кодом ошибки. – Gnemlock