지난 2 일 동안 RecyclerView를 설정하려고했지만 대부분이 의도 한대로 작동하는 것 같습니다. 내 응용 프로그램을 실행하려고 할 때마다 그러나, 그것은 치명적인 예외와 충돌 :
E/AndroidRuntime을 : 치명적인 예외 : 주요 프로세스 : com.mad.exercise5, PID : 16634 android.content.res. 자원 $의 NotFoundException : android.content.res.Resources.getText (Resources.java:342)에서 문자열 리소스 ID 번호 0x1로 android.support.v7.widget.ResourcesWrapper.getText (ResourcesWrapper.java:52) 에서 안드로이드에서 .widget.TextView.setText (TextView.java:4244) 에서 (...)
다음은 the slideview tutorials from YouTube, 1 부 1-4입니다. 자습서의 맥락에서, RecyclerView는 내가 아직 들어 가지 않은 조각에 설정되어 있습니다. 단지 주 활동에서 RecyclerView를 작성하여 오류가 발생한 경우를 대비하여 a tutorial at StackTips을 시도해 보았습니다.
최상의 방법으로 레이아웃 관리자 (mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
)를 설정하는 줄을 주석 처리하여 오류를 중지 할 수 있지만 오류는 onBindViewHolder
에서 발생한 것 같습니다. 특히, 텍스트를 ViewHolder TextViews로 설정합니다.
Google 검색에서 오류를 조사하고 몇 가지 조사를 실시한 결과,이 오류가 다른 질문과 문제에서 나타났습니다. 그러나 문제는 항상 사용자가 리소스를 호출하지만 직접 ID로 참조하는 것으로 보입니다. 즉, 'String string = getString(R.string.string)
'대신 'String string = R.string.string
'을 사용합니다. 표준 리소스 구현을 세 번 확인 했으므로 아무 것도 놓치지 않았 음을 확신합니다. 지금까지 자습서를 통해 믿을 수있게되었지만 findViewById
의 올바른 구현으로 TextView를 올바르게 인스턴스화했습니다. 주요 활동 컨텍스트는 초기화시 전달되므로 관련 ID를 찾는 데 문제가 없어야합니다.
RecyclerView 예제 작업에서 Resources $ NotFoundException을받는 이유는 무엇입니까? 다음과 같이 두 개의 관련 자바 클래스는 다음과 같습니다
MainActivity.java TextView의
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);
}
}
}
와
android.content.res.Resources$NotFoundException: String resource ID #0x1
변화
viewHolder.arrivalTimeText.setText(currentTrain.GetArrivalTime());
라인을 가지고 왜 은입니다. 상당히 길었 기 때문에 처음 몇 라인만으로도 세부적인 정보를 얻을 수 있었고 대량의 에러 코드로 넘쳐나기를 바랬습니다. – Gnemlock