마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 NotFoundException 질문.

0 추천

Error 내역

 E/AndroidRuntime: FATAL EXCEPTION: main

android.content.res.Resources$NotFoundException: Resource ID #0x7f070074 type #0x12 is not valid

        at com.example.myapplication.MainAdapter.onCreateViewHolder(MainAdapter.java:48)
        at com.example.myapplication.MainAdapter.onCreateViewHolder(MainAdapter.java:16)

 

MainAdapter.java

import android.annotation.SuppressLint;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import androidx.recyclerview.widget.RecyclerView;

import io.realm.Realm;
import io.realm.RealmQuery;
import io.realm.RealmResults;

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.ViewHolder> {
    int year, month;
    //메모의 문자열을 저장하기 위한 배열
    String[] memos = new String[31];
    public MainAdapter(int year, int month) {
        this.year = year;
        this.month = month;
//메모 객체를 저장하기 위한 변수
        RealmResults<Memo> results;
//Realm DB에 저장된 메모들의 Query를 이용해 해당 연,월의 memo리스트를 불러온다.
        Realm realm = Realm.getDefaultInstance();
        RealmQuery<Memo> query = realm.where(Memo.class);
        results = query
                .equalTo("year", year)
                .equalTo("month", month)
                .findAll();
        for(Memo m : results) {
            memos[m.getDate()-1] = m.getMemo();
        }
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//리스트 아이템의 레이아웃 연결
        @SuppressLint("ResourceType") View v = LayoutInflater.from(parent.getContext()).inflate(R.id.main_list, parent, false);
//ViewHolder에 레이아웃 연결한 리스트 아이템 뷰를 전달
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        //메모가 비어있으면
        if(TextUtils.isEmpty(memos[position]))
            //날짜를 보여주고
            holder.mTextView.setText((position + 1) + " 일");
            //메모가 비어있지 않으면
        else
            //메모 내용을 보여준다.
            holder.mTextView.setText(memos[position]);

    }

    @Override
    public int getItemCount() {
        return 31;
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        //리스트 요소(element)의 텍스트 뷰
        public TextView mTextView;
        public ViewHolder(View v) {
            super(v);
            mTextView = v.findViewById(R.id.tv_date);
            mTextView.setOnClickListener(view -> {
                if(getAdapterPosition() == RecyclerView.NO_POSITION)
                    return;

                mTextView.getContext().startActivity(MemoActivity.newIntent(mTextView.getContext()
                        , year, month, getAdapterPosition()+1, memos[getAdapterPosition()]));
            });
        }
    }
}

 

해당 에러가 왜 나는지 모르겠습니다ㅠㅠㅠ

필요하신 소스있으시면 댓글로 달겠습니다!!

도와주세요!!!

꿀개 (2,440 포인트) 님이 2019년 9월 23일 질문

1개의 답변

0 추천

로그만 놓고 본다면, 

 @SuppressLint("ResourceType") View v = LayoutInflater.from(parent.getContext()).inflate(R.id.main_list, parent, false);

수행 시 Resources$NotFoundException 가 발생했습니다.

 

아무래도  parent.getContext() 에서 R.id.main_list 의 리소스를 못 찾은 것으로 생각됩니다.

R.id.main_list 구성이 제대로 되서 컴파일 되는 상황이라면,

parent.getContext() 가 문제일듯 합니다. parent.getContext() 값 대신  생성자에서 아래와 같이 context 값을 넘겨 받아 멤버 변수로 두었다가 사용하도록 변경 해 보세요.

private Context mContext;

public MainAdapter(Context context, int year, int month)  {

   mContext = context;

}

 @SuppressLint("ResourceType") View v = LayoutInflater.from(mContext).inflate(R.id.main_list, parent, false);

익명사용자 님이 2019년 9월 23일 답변
그래도 안되네요...
이런 에러뜹니다ㅠㅠ
error: constructor MainAdapter in class MainAdapter cannot be applied to given types;
required: Context,int,int
found: Integer,int
reason: actual and formal argument lists differ in length
...