2017-04-21 2 views
2

나는 내부 기억 장치에서 이미지를로드해야만 이론적으로 RecyclerView에 표시 할 수있다. 나는 내가 모든 단계를 바르게 따라 갔다라고 생각한다. 그리고 많은 실패한 시도 후 나는 여기에서 묻고있다. 그래서 나는 어댑터에 데이터를 따라 잡는 코드가 잘못되었다고 생각하지만, 그것을 검증하기 위해 어떤 것도 생각할 수 없다. 어떤 도움, 관측, 제안은 크게 감사드립니다.RecyclerView 아무 것도 보이지 않는다.

(내가 데이터를 얻을)

Photos.java :

public class Photos { 
static ArrayList<String> filenameListTemp=new ArrayList<>(); 
static ArrayList<File> photosList=new ArrayList<>(); 

public static ArrayList<String> getPhotos(File internal){ 
    File listFolers[]=internal.listFiles(); 
    if (listFolers!=null && listFolers.length>0){ 
     for (File file:listFolers) { 
      if (file.isDirectory()){ 
       getPhotos(file); 
      } 
      else { 
       if (file.getName().endsWith(".png")||file.getName().endsWith(".jpg")||file.getName().endsWith(".gif")||file.getName().endsWith(".bmp")){ 
        String temp =file.getPath().substring(0,file.getPath().lastIndexOf('/')); 

        if (!filenameListTemp.contains(temp)){ 
         filenameListTemp.add(temp); //This add names 
         photosList.add(file);// This add Files 
        } 
       } 
      } 
     } 
    } 
     return filenameListTemp; 
    } 
} 

RecyclerViewAdapter :

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> { 

Context context; 
ArrayList<String> photos=new ArrayList<>(); 
LayoutInflater layoutinflater; 



public RecyclerViewAdapter(Context context, ArrayList<String> photos) { 
    this.context=context; 
    this.photos=photos; 
    layoutinflater=LayoutInflater.from(context); 
} 



@Override 
public RecyclerViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view=layoutinflater.inflate(R.layout.recyclerview_item_list,parent,false); 
    RecyclerViewAdapter.ViewHolder holder=new RecyclerViewAdapter.ViewHolder(view); 
    return holder; 
} 

@Override 
public void onBindViewHolder(RecyclerViewAdapter.ViewHolder holder, int position) { 

     holder.image.setImageBitmap(BitmapFactory.decodeFile(photos.get(position))); 

} 

@Override 
public int getItemCount() { 
    return photos.size(); 
} 

public class ViewHolder extends RecyclerView.ViewHolder { 
    ImageView image; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     image= (ImageView) itemView.findViewById(R.id.image); 
    } 
    } 
    } 
} 

MainActivity.java

public class MainActivity extends AppCompatActivity { 
RecyclerView recyclerView; 
RecyclerViewAdapter adapter; 
File expath= Environment.getExternalStorageDirectory(); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    recyclerView= (RecyclerView) findViewById(R.id.recyclerview); 
    adapter=new RecyclerViewAdapter(this, Photos.getPhotos(expath)); 
    recyclerView.setAdapter(adapter); 
    recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL)); 
    } 
} 
+0

내부 저장소에서로드 할 수 있다면 데이터를 기록 했습니까? 귀하의 recyclerview에 표시되는 데이터를 얻지 못하면 사용 가능한 데이터 소스가 없음을 의미 할 수 있습니다. – uncannyj

답변

2

1.이 내 파일입니다 읽으려면 AndroidManifest.xml에 권한을 추가했는지 확인하십시오. 외부 저장.

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

2

는 작업 기상 여부를 알고 filenameListTempphotosList의 크기를 확인하기 위해, getPhotos() 방법에 약간의 logs을 넣습니다.

+0

감사합니다 !!, 나는 그것을 만들었고 결과는 어댑터에 전달 된 arraylist는 비어있었습니다. 그리고 런타임 권한을 추가하는 것을 잊었습니다 – Kevin

+0

내 기쁨 .... 내 대답이 유용하다고 생각되면 upvote주세요. 참고로, 나는 upvote에 대한 특권을 얻는 데 도움이되는 질문을 이미 upvoted했습니다. 미리 감사드립니다 :) – FAT

0

는 크기가 0 다음은 어댑터

감사 아무것도 표시됩니다 경우는 어댑터를 전달하고있는 ArrayList를가 0보다 큰 크기를 가지고 있는지 확인하십시오!

+0

그래, 그 arraylist 결국 비어있었습니다. 나는 지금 일하고있어. – Kevin

관련 문제