2

Я пытаюсь узнать, используя RecyclerView с Realm. Я следую официальному учебнику от here.Как использовать Android-адаптер Realm с RecyclerView

Но я столкнулся с ошибкой в ​​воспроизведении самого примера, когда сам написал программу.

Realm RecyclerView Adapter Error

Официальный MyRecyclerViewAdapter пример кода размещен here на Github Realm в.

Мой SubjectsAdapter код -

package in.medicalguru.adapters; 

import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

import in.medicalguru.MainActivity; 
import in.medicalguru.R; 
import in.medicalguru.models.TimeStamp; 
import io.realm.OrderedRealmCollection; 
import io.realm.RealmRecyclerViewAdapter; 

public class SubjectsAdapter extends RealmRecyclerViewAdapter<TimeStamp, SubjectsAdapter.MyViewHolder> { 
    private final MainActivity activity; 

    public SubjectsAdapter(MainActivity activity, OrderedRealmCollection<TimeStamp> data) { 
     super(data, true); 
     this.activity = activity; 
    } 


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

    @Override 
    public void onBindViewHolder(MyViewHolder holder, int position) { 
     TimeStamp obj = getData().get(position); 
     holder.data = obj; 
     //holder.title.setText(obj.getSubjectName()); 
     holder.title.setText(obj.getTimeStamp()); 
    } 


    class MyViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener { 
     public TextView title; 
     public TimeStamp data; 

     public MyViewHolder(View view) { 
      super(view); 
      title = (TextView) view.findViewById(R.id.textview); 
      view.setOnLongClickListener(this); 
     } 

     @Override 
     public boolean onLongClick(View v) { 
      //activity.deleteItem(data); 
      return true; 
     } 
    } 
} 

Соответствующая часть проекта-х build.grade:

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.2.2' 
     classpath "io.realm:realm-gradle-plugin:2.2.1" 
     // NOTE: Do not place your application dependencies here; they belong 
     // in the individual module build.gradle files 
    } 
} 

Соответствующая часть модуля build.gradle: -

apply plugin: 'com.android.application' 
apply plugin: 'realm-android' 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    compile 'com.android.support:appcompat-v7:25.0.1' 
    compile 'com.google.android.gms:play-services-ads:10.0.1' 
    testCompile 'junit:junit:4.12' 
    compile 'com.google.code.gson:gson:2.4' 
    compile 'org.glassfish:javax.annotation:10.0-b28' 
    compile 'com.android.support:recyclerview-v7:25.0.1' 
    compile 'io.realm:android-adapters:1.4.0' 
} 

К сожалению, я очень новый для Царства, и я не могу понять, что точно эта ошибка означает, поэтому я не мог даже об этом говорить.

+2

это просто говорит о том, что 'супер()' вызов отсутствует ключ 'параметру context' – EpicPandaForce

+0

@EpicPandaForce, спасибо, я получил его. Просто для изучения, почему указанному примеру не нужен «контекст» в 'супер'? –

+1

Поскольку они фактически не используют этот параметр Context и [планируется удалить в 1.5.0] (https://github.com/realm/realm-android-adapters/blob/master/CHANGELOG.md) – EpicPandaForce

ответ

4

Подсказка IntelliJ говорит о первом аргументе в super. Вызов вашего конструктора должен быть Context.

попробуйте это.

public SubjectsAdapter(MainActivity activity, OrderedRealmCollection<TimeStamp> data) { 
    super(activity, data, true); 
    this.activity = activity; 
}