2016-08-20 4 views
1

Ich möchte RecycleView für die Anzeige meines Datenfeldes verwenden.Wie ordnen Sie die Daten auf RecycleView in Android?

Dies ist meine Adapater-Klasse, die Daten in der Ansicht setzt.

public class DataAdapter extends RecyclerView.Adapter<DataAdapter.MyViewHolder>{ 

     private Context context; 
     private List<Pojo> dataList; 

     public DataAdapter(Context context, List<Pojo> dataList) { 
      this.context = context; 
      this.dataList = dataList; 
     } 

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

     @Override 
     public void onBindViewHolder(MyViewHolder holder, int position) { 
      holder.categoryTV.setText(dataList.get(position).getGameName()); 
     } 

     @Override 
     public int getItemCount() { 

      return dataList.size(); 
     } 

     public class MyViewHolder extends RecyclerView.ViewHolder{ 

      public TextView categoryTV; 

      public MyViewHolder(View itemView) { 
       super(itemView); 
       categoryTV = (TextView) itemView.findViewById(R.id.text); 
      } 
     } 
    } 

Das ist mein activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:id="@+id/rellayout" 
    tools:context="com.acknotech.kiran.retrofit_second.MainActivity"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/text"/> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/my_recycler_view" 
     android:scrollbars="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     </android.support.v7.widget.RecyclerView> 
</RelativeLayout> 

Dies ist MainActivity ..

public class MainActivity extends AppCompatActivity { 

    private RecyclerView recyclerView; 
    private DataAdapter dataAdapter; 
    private List<Pojo> dataArrayList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     initViews(); 
    } 

    private void initViews(){ 
     recyclerView=(RecyclerView) findViewById(R.id.my_recycler_view); 
     recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); 
     loadJSON(); 
    } 

    private void loadJSON(){ 
     dataArrayList = new ArrayList<>(); 
     Retrofit retrofit=new Retrofit.Builder().baseUrl("my url").addConverterFactory(GsonConverterFactory.create()).build(); 
     AllGamesAPI requestInterface=retrofit.create(AllGamesAPI.class); 

     Call<List<Pojo>> call= requestInterface.getJSON(); 
     call.enqueue(new Callback<List<Pojo>>() { 
      @Override 
      public void onResponse(Call<List<Pojo>> call, Response<List<Pojo>> response) { 
       dataArrayList = response.body(); 
       dataAdapter=new DataAdapter(getApplicationContext(),dataArrayList); 
       recyclerView.setAdapter(dataAdapter); 
      } 

      @Override 
      public void onFailure(Call<List<Pojo>> call, Throwable t) { 
        Log.e("Error",t.getMessage()); 
      } 

     }); 
    } 
} 

Wenn ich versuche, es immer zu einem Zeitpunkt nur ein Element Druck auszuführen, sondern in Datenliste i Habe 11 Gegenstände.

Wie RecyclerView verwenden, um alle Elemente auf einer Seite zu erhalten?

Dank & Grüße

+0

Überprüfen Sie weitere Optionen mit der Funktion response.body() –

+0

Ich bekomme 11 Elemente zu DataAdapter ... meine Zweifel ist, wie Sie diese 11 Elemente in Adapter über XML-Daten behandeln. – Jaccs

Antwort

1

Sie sollten die Aktivitäten Layout in onCreateViewHolder, nicht aufblasen, sondern ein Layout für nur ein Element aufzublasen (z android.R.layout.simple_list_item_1, oder einer eigenen). Dieses Layout sollte nicht für die Höhe der Elemente verwenden.

+0

Ja, Sie scheinen den Fehler hier entdeckt zu haben! –

+0

Wenn ich versuche, das Layout zu ersetzen, was Sie vorgeschlagen, stürzt meine App und in Protokoll .. :: java.lang.NullPointerException: Versuch, virtuelle Methode 'void android.widget.TextView.setText (java.lang.CharSequence) 'auf einem Nullobjekt Referenz Dieser Fehler habe ich im Protokoll gesehen. Ich denke, das liegt daran, dass ich diese Ansicht zurückgebe und sie von MyViewHolder als übergeordnete Ansicht verwendet wird. – Jaccs

+0

Sie müssen auch die Textansicht ID anpassen. (simple_list_item_1 verwendet android.R.id.text1) – F43nd1r

Verwandte Themen