2017-09-18 14 views
0

Data()이라는 메서드를 사용하여 for 루프가 계속해서 텍스트 뷰를 설정하도록하는 간단한 방법으로 Recycler보기를 사용하여 항목 목록을 만들려고합니다.하지만 앱을 실행할 때 아무 것도없는 흰색 화면.데이터가 RecyclerView에 표시되지 않음

public class MainActivity extends AppCompatActivity { 

    RecyclerView mRecyclerView; 
    RecyclerAdapter mAdapter ; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mRecyclerView =(RecyclerView) findViewById(R.id.recycler_view); 
     LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); 
     mRecyclerView.setLayoutManager(linearLayoutManager); 
     mRecyclerView.setAdapter(mAdapter); 
     } 

    private class RecyclerAdapter extends RecyclerView.Adapter<MyViewHolder{ 

     @Override 
     public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.list_item,parent,false); 
      MyViewHolder holder = new MyViewHolder(view); 
      return holder; 
     } 

     @Override 
     public void onBindViewHolder(MyViewHolder holder, int position) {  
      holder.Data(); 
     } 

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

    private class MyViewHolder extends RecyclerView.ViewHolder{ 
     public TextView mmTextView ; 
     private Button mButton; 
     public MyViewHolder(View itemView) { 
      super(itemView); 
      mmTextView = (TextView) findViewById(R.id.list_text_view); 
      mButton = (Button) findViewById(R.id.list_button); 
     } 

     private void Data(){ 
      for (int i =0 ;i<=100;i++){ 
       mmTextView.setText(String.valueOf("Text : " + i)); 
      }  
     } 
    } 

} 
+0

당신은 현재 (EVERY 홀더에 100 텍스트 문자열을 추가 : onBindViewHolder 방법에 – kalabalik

+0

네, KalaBalik의 말입니다. 당신은 총 100 회의 조회에 대해 Holder의 각보기를 101 번 설정하려하지만 Holder에게 textview를 표시하지 않으며 작동하지 않습니다. – Thracian

+0

recyclerview 어댑터가 작동합니다. https://developer.android.com/training/material/lists-cards.html – gyosida

답변

0

당신은 itemView에서하지 Activity에서 mmTextView을 infilate한다. mmTextView = (TextView) itemView.findViewById(R.id.list_text_view);이어야하며 보유자의 관점이므로 onBindViewHolder() 방법을 사용하면 holder.mmTextView.setText()을 사용할 수 있습니다. Activity의 onCreate()에있는 Infilate 버튼을 사용하면 생성자 내부의 어댑터에 데이터를 전달하고 어느 뷰가 보유하고 있는지 알기 때문에 onBindViewHolder() 메서드에서 어댑터에 데이터를 바인딩하는 것이 편리합니다. 이들 각각은 당신의`TextView`와`Button`의 한 세트를 보유하도록되어

mmTextView.mmTextView.setText("SOME STRING VALUE"); 
0

는 텍스트 뷰에 데이터를 바인딩 조합.
+0

BindViewHolder()에서보기를 확장하지 않으면 사용자의 소유자보기에 데이터를 바인딩합니다. public MyViewHolder (itemView보기)의 내부 생성자를 내부에 infilate하십시오. {mmTextView = (TextView) itemView.findViewById (R.id.list_text_view);} 그러면 onBindViewHolder() 메소드 내부에서 holder.mmTextView로 사용할 수 있습니다. – Thracian

+0

당신 말이 맞아요. 내 대답을 업데이트했습니다. –

관련 문제