2016-03-03 61 views
1

我想通過使用查詢來檢索最喜歡的學校及其使用Realm的最喜歡學生的頭部列表視圖。通過接口添加Realm對象中的方法

的Point Grey中學
肯特

我的問題是能否實現方法在境界對象,這樣我就可以使用的方法,以找出是否境界的結果是頭部或物品,如果它couldn不能完成,我可以如何避免並仍然從領域結果打印標題和列表視圖。

我在編譯下面的代碼時也有錯誤。它說

我的接口類 「干將isHeader不與任何字段關聯」:

public interface Item { 

boolean isHeader(); 

} 

我的模型類:

public class School extends RealmObject implements Item{ 

@Required 
private String SchoolID; 
private String SchoolName; 
private RealmList<Student> Students; 


@Ignore 
private boolean answerSchool = true; 

public boolean isHeader() { 
    return answerSchool; 
} 

getters/ setters 
} 

public class Student extends RealmObject implements Item { 

@Required 
private String StudentID; 
private String StudentName; 
private Boolean StudentFavourite; 


@Ignore 
private boolean answerStudent = false; 

public boolean isHeader() { 
    return answerStudent; 
} 
getters /setters 

} 

我的適配器類別

public class FavourAdapter extends ArrayAdapter<Item> { 

private Context context; 
private ArrayList<Item> items; 
private LayoutInflater vi; 



public FavourAdapter(Context context, ArrayList<Item> Items) { 
    super(context, 0, Items); 
    this.context = context; 
    vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 

    final Item i = items.get(position); 
    if (i != null) { 
     if(i.isHeader()){ 

    // Is si School ok in realm? 
    School si = (School)i; 
      v = vi.inflate(R.layout.row_favour_school, parent, false); 


      final TextView headerSection = (TextView) v.findViewById(R.id.rowFavSchoolName); 
      headerSection.setText(si.getSchoolName()); 

     }else{ 
      // Can I declare studentRow as Student in realm? 
      Student studentRow = (Student)i; 
      v = vi.inflate(R.layout.row_favour_student, parent, false); 
      final TextView title = (TextView)v.findViewById(R.id.rowFavStudentName); 



      if (title != null) 
       title.setText(studentRow.getStudentName()); 

     } 
    } 
    return v; 
} 

}

我的主要活動類:

public class FavourActivity extends AppCompatActivity { 

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

    Realm realm = Realm.getDefaultInstance(); 
    ArrayList<Item> items = new ArrayList<Item>(); 
    ListView listview=null; 
    listview=(ListView)findViewById(R.id.favStudents_list); 

    //Retrieve all the school object if they have any favourite students. 
    RealmResults<School> schools = realm.where(School.class).equalTo("Students.StudentFavourite", true).findAll(); 
    //Get the first favourite school 
    items.add(schools.get(0)); 

    //Retrieve all the favourite student from the first favourite school. 
    RealmResults<Student> favStudents = schools.get(0).getStudents().where().equalTo("StudentFavourite", true).findAll(); 

    items.add(favStudents.get(0)); 
    items.add(favStudents.get(1)); 

    FavourAdapter fAdapter = new FavourAdapter(this, items); 
    listview.setAdapter(fAdapter); 


    //Log.d("fav", String.valueOf(favStudents)); 



} 

回答

2

目前(境0.87.x及以下)一個領域對象可以只有已經默認getter和setter方法 - 沒有其他的方法是允許的。

isHeader是布爾成員的getter的默認Java風格,所以Realm期待private boolean header;聲明,這顯然不存在。

A comment on this answer來自Realm開發者之一表示,這個限制可能會在Realm 0.88中被解除 - 實際上,the pull request in question has been merged,所以這個功能很快就可以使用!

相關問題