質問編集履歴

4 質問愛の「正常な動作」について定義をわかりやすくしました

sakanasann

sakanasann score 3

2017/01/23 09:46  投稿

Java Realmでタイトルでのソートができません。
以下のようなコードを書きました。
年月日でのソートはできるようになりましたが、タイトルでのソートができませんでした。
タイトルでのソートを実行すると、何らかのソートをしているように見えますが、タイトルを参照したソートではありません。
繰り返しますが、年月日のソートは正常に動作し、タイトルのソートのみ正常に動作しません。
どうすれば正常に動作するでしょうか?
【タイトル欄に入力されている文字を「あいうえお順」または「ABC順」に並び替える動作】を正常な動作とします。
年月日ソートの正常な動作の定義:【年月日入力欄に入力されている数字を昇順降順に並び替える動作】(こちらは現在正常な動作をしているように見えます)
タイトルソートの正常な動作の定義:
【タイトル欄に入力されている文字を「あいうえお順」または「ABC順」に並び替える動作】(こちらが正常な動作をしていません)
・ソート処理部分(メニューから指定のボタンを押すと動作するようにしています)
```Javva
public boolean onOptionsItemSelected(MenuItem item) {
       int id = item.getItemId();
       if (id == R.id.action_settings) {
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll();
           schedules.sort("date", Sort.ASCENDING);
           ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true);
           mListView.setAdapter(adapter);
           Toast.makeText(this, "年月日を参照し昇順に並び替えました", Toast.LENGTH_SHORT).show();
           return true;
       }else if(id == R.id.action_settings2){
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll();
           schedules.sort("date", Sort.DESCENDING);
           ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true);
           mListView.setAdapter(adapter);
           Toast.makeText(this, "年月日を参照し降順に並び替えました", Toast.LENGTH_SHORT).show();
           return true;
       }else if(id == R.id.action_settings3) {
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll();
           schedules.sort("title", Sort.DESCENDING);
           ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true);
           mListView.setAdapter(adapter);
           Toast.makeText(this, "タイトルを参照し降順に並び替えました", Toast.LENGTH_SHORT).show();
           return true;
       }else if(id == R.id.action_settings4) {
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll();
           schedules.sort("title", Sort.DESCENDING);
           ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true);
           mListView.setAdapter(adapter);
           Toast.makeText(this, "タイトルを参照し降順に並び替えました", Toast.LENGTH_SHORT).show();
           return true;
       }
       return super.onOptionsItemSelected(item);
   }
```
・Scheduleクラス
```Java
public class Schedule extends RealmObject{
   @PrimaryKey
   private long id;
   private Date date;
   private String title;
   private String detail;
   public long getId() {
       return id;
   }
   public void setId(long id) {
       this.id = id;
   }
   public Date getDate() {
       return date;
   }
   public void setDate(Date date) {
       this.date = date;
   }
   public String getTitle() {
       return title;
   }
   public void setTitle(String title) {
       this.title = title;
   }
   public String getDetail() {
       return detail;
   }
   public void setDetail(String detail) {
       this.detail = detail;
   }
}
```
・ScheduleAdapterクラス
```Javapublic class ScheduleAdapter extends RealmBaseAdapter<Schedule> {
   private static class ViewHolder {
       TextView date;
       TextView title;
   }
   public ScheduleAdapter(Context context, RealmResults<Schedule> realmResults, boolean automaticUpdate) {
       super(context, realmResults, automaticUpdate);
   }
   @Override
   public View getView(int position, View convertView, ViewGroup parent) {
       ViewHolder viewHolder;
       if(convertView == null) {
           convertView = inflater.inflate(android.R.layout.simple_list_item_2, parent, false);
           viewHolder = new ViewHolder();
           viewHolder.date = (TextView) convertView.findViewById(android.R.id.text1);
           viewHolder.title = (TextView)convertView.findViewById(android.R.id.text2);
           convertView.setTag(viewHolder);
       } else {
           viewHolder = (ViewHolder)convertView.getTag();
       }
       Schedule schedule = realmResults.get(position);
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
       String formatDate = sdf.format(schedule.getDate());
       viewHolder.date.setText(formatDate);
       viewHolder.title.setText(schedule.getTitle());
       return convertView;
   }
}
```
・ScheduleEditActivityクラスの内容の一部
```Java
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_schedule_edit);
       mDateEdit= (EditText) findViewById(R.id.dateEdit);
       mTitleEdit= (EditText) findViewById(R.id.titleEdit);
       mDetailEdit = (EditText) findViewById(R.id.detailEdit);
       mDelete = (Button) findViewById(R.id.delete);
       long scheduleId = getIntent().getLongExtra("schedule_id", -1);
       if (scheduleId != -1) {
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> results = realm.where(Schedule.class)
                   .equalTo("id", scheduleId).findAll();
           Schedule schedule = results.first();
           SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
           String date = sdf.format(schedule.getDate());
           mDateEdit.setText(date);
           mTitleEdit.setText(schedule.getTitle());
           mDetailEdit.setText(schedule.getDetail());
           mDelete.setVisibility(View.VISIBLE);
       } else {
           mDelete.setVisibility(View.INVISIBLE);
       }
   }
   public void onSaveTapped(View view) {
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
       Date date = new Date();
       try {
           date = sdf.parse(mDateEdit.getText().toString());
       } catch (ParseException e) {
           e.printStackTrace();
       }
       long scheduleId = getIntent().getLongExtra("schedule_id", -1);
       if (scheduleId != -1) {
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> results = realm.where(Schedule.class)
                   .equalTo("id", scheduleId).findAll();
           realm.beginTransaction();
           Schedule schedule = results.first();
           schedule.setDate(date);
           schedule.setTitle(mTitleEdit.getText().toString());
           schedule.setDetail(mDetailEdit.getText().toString());
           realm.commitTransaction();
           Snackbar.make(findViewById(android.R.id.content), "更新しました"
                   , Snackbar.LENGTH_SHORT)
                   .setAction("戻る", new View.OnClickListener() {
                       @Override
                       public void onClick(View v) {
                           finish();
                       }
                   })
                   .setActionTextColor(Color.YELLOW)
                   .show();
       } else {
           Realm realm = Realm.getInstance(this);
           realm.beginTransaction();
           Number maxId = realm.where(Schedule.class).max("id");
           long nextId = 1;
           if (maxId != null) nextId = maxId.longValue() + 1;
           Schedule schedule = realm.createObject(Schedule.class);
           schedule.setId(nextId);
           schedule.setDate(date);
           schedule.setTitle(mTitleEdit.getText().toString());
           schedule.setDetail(mDetailEdit.getText().toString());
           realm.commitTransaction();
           Toast.makeText(this, "追加しました", Toast.LENGTH_SHORT).show();
           finish();
   
```
・メニューXML内の指定部分
```Java
<item
       android:id="@+id/action_settings"
       android:orderInCategory="100"
       android:title="@string/action_settings"
       app:showAsAction="never" />
   <item
       android:id="@+id/action_settings2"
       android:orderInCategory="100"
       android:title="@string/action_settings2"
       app:showAsAction="never" />
   <item
       android:id="@+id/action_settings3"
       android:orderInCategory="100"
       android:title="@string/action_settings3"
       app:showAsAction="never" />
   <item
       android:id="@+id/action_settings4"
       android:orderInCategory="100"
       android:title="@string/action_settings4"
       app:showAsAction="never" />
```
  • Java

    15822 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    7297 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    4297 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

  • Realm

    258 questions

    RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

3 引用コード追加

sakanasann

sakanasann score 3

2017/01/20 12:15  投稿

Java Realmでタイトルでのソートができません。
以下のようなコードを書きました。
年月日でのソートはできるようになりましたが、タイトルでのソートができませんでした。
タイトルでのソートを実行すると、何らかのソートをしているように見えますが、タイトルを参照したソートではありません。
繰り返しますが、年月日のソートは正常に動作し、タイトルのソートのみ正常に動作しません。
どうすれば正常に動作するでしょうか?
【タイトル欄に入力されている文字を「あいうえお順」または「ABC順」に並び替える動作】を正常な動作とします。
・ソート処理部分(メニューから指定のボタンを押すと動作するようにしています)
```Javva
public boolean onOptionsItemSelected(MenuItem item) {
       int id = item.getItemId();
       if (id == R.id.action_settings) {
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll();
           schedules.sort("date", Sort.ASCENDING);
           ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true);
           mListView.setAdapter(adapter);
           Toast.makeText(this, "年月日を参照し昇順に並び替えました", Toast.LENGTH_SHORT).show();
           return true;
       }else if(id == R.id.action_settings2){
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll();
           schedules.sort("date", Sort.DESCENDING);
           ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true);
           mListView.setAdapter(adapter);
           Toast.makeText(this, "年月日を参照し降順に並び替えました", Toast.LENGTH_SHORT).show();
           return true;
       }else if(id == R.id.action_settings3) {
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll();
           schedules.sort("title", Sort.DESCENDING);
           ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true);
           mListView.setAdapter(adapter);
           Toast.makeText(this, "タイトルを参照し降順に並び替えました", Toast.LENGTH_SHORT).show();
           return true;
       }else if(id == R.id.action_settings4) {
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll();
           schedules.sort("title", Sort.DESCENDING);
           ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true);
           mListView.setAdapter(adapter);
           Toast.makeText(this, "タイトルを参照し降順に並び替えました", Toast.LENGTH_SHORT).show();
           return true;
       }
       return super.onOptionsItemSelected(item);
   }
```
・Scheduleクラス
```Java
public class Schedule extends RealmObject{
   @PrimaryKey
   private long id;
   private Date date;
   private String title;
   private String detail;
   public long getId() {
       return id;
   }
   public void setId(long id) {
       this.id = id;
   }
   public Date getDate() {
       return date;
   }
   public void setDate(Date date) {
       this.date = date;
   }
   public String getTitle() {
       return title;
   }
   public void setTitle(String title) {
       this.title = title;
   }
   public String getDetail() {
       return detail;
   }
   public void setDetail(String detail) {
       this.detail = detail;
   }
}
```
・ScheduleAdapterクラス
```Javapublic class ScheduleAdapter extends RealmBaseAdapter<Schedule> {
   private static class ViewHolder {
       TextView date;
       TextView title;
   }
   public ScheduleAdapter(Context context, RealmResults<Schedule> realmResults, boolean automaticUpdate) {
       super(context, realmResults, automaticUpdate);
   }
   @Override
   public View getView(int position, View convertView, ViewGroup parent) {
       ViewHolder viewHolder;
       if(convertView == null) {
           convertView = inflater.inflate(android.R.layout.simple_list_item_2, parent, false);
           viewHolder = new ViewHolder();
           viewHolder.date = (TextView) convertView.findViewById(android.R.id.text1);
           viewHolder.title = (TextView)convertView.findViewById(android.R.id.text2);
           convertView.setTag(viewHolder);
       } else {
           viewHolder = (ViewHolder)convertView.getTag();
       }
       Schedule schedule = realmResults.get(position);
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
       String formatDate = sdf.format(schedule.getDate());
       viewHolder.date.setText(formatDate);
       viewHolder.title.setText(schedule.getTitle());
       return convertView;
   }
}
```
・ScheduleEditActivityクラスの内容の一部
```Java
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_schedule_edit);
       mDateEdit= (EditText) findViewById(R.id.dateEdit);
       mTitleEdit= (EditText) findViewById(R.id.titleEdit);
       mDetailEdit = (EditText) findViewById(R.id.detailEdit);
       mDelete = (Button) findViewById(R.id.delete);
       long scheduleId = getIntent().getLongExtra("schedule_id", -1);
       if (scheduleId != -1) {
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> results = realm.where(Schedule.class)
                   .equalTo("id", scheduleId).findAll();
           Schedule schedule = results.first();
           SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
           String date = sdf.format(schedule.getDate());
           mDateEdit.setText(date);
           mTitleEdit.setText(schedule.getTitle());
           mDetailEdit.setText(schedule.getDetail());
           mDelete.setVisibility(View.VISIBLE);
       } else {
           mDelete.setVisibility(View.INVISIBLE);
       }
   }
   public void onSaveTapped(View view) {
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
       Date date = new Date();
       try {
           date = sdf.parse(mDateEdit.getText().toString());
       } catch (ParseException e) {
           e.printStackTrace();
       }
       long scheduleId = getIntent().getLongExtra("schedule_id", -1);
       if (scheduleId != -1) {
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> results = realm.where(Schedule.class)
                   .equalTo("id", scheduleId).findAll();
           realm.beginTransaction();
           Schedule schedule = results.first();
           schedule.setDate(date);
           schedule.setTitle(mTitleEdit.getText().toString());
           schedule.setDetail(mDetailEdit.getText().toString());
           realm.commitTransaction();
           Snackbar.make(findViewById(android.R.id.content), "更新しました"
                   , Snackbar.LENGTH_SHORT)
                   .setAction("戻る", new View.OnClickListener() {
                       @Override
                       public void onClick(View v) {
                           finish();
                       }
                   })
                   .setActionTextColor(Color.YELLOW)
                   .show();
       } else {
           Realm realm = Realm.getInstance(this);
           realm.beginTransaction();
           Number maxId = realm.where(Schedule.class).max("id");
           long nextId = 1;
           if (maxId != null) nextId = maxId.longValue() + 1;
           Schedule schedule = realm.createObject(Schedule.class);
           schedule.setId(nextId);
           schedule.setDate(date);
           schedule.setTitle(mTitleEdit.getText().toString());
           schedule.setDetail(mDetailEdit.getText().toString());
           realm.commitTransaction();
           Toast.makeText(this, "追加しました", Toast.LENGTH_SHORT).show();
           finish();
   
```
・メニューXML内の指定部分
```Java
<item
       android:id="@+id/action_settings"
       android:orderInCategory="100"
       android:title="@string/action_settings"
       app:showAsAction="never" />
   <item
       android:id="@+id/action_settings2"
       android:orderInCategory="100"
       android:title="@string/action_settings2"
       app:showAsAction="never" />
   <item
       android:id="@+id/action_settings3"
       android:orderInCategory="100"
       android:title="@string/action_settings3"
       app:showAsAction="never" />
   <item
       android:id="@+id/action_settings4"
       android:orderInCategory="100"
       android:title="@string/action_settings4"
       app:showAsAction="never" />
```
  • Java

    15822 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    7297 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    4297 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

  • Realm

    258 questions

    RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

2 正常な動作の定義についての追記

sakanasann

sakanasann score 3

2017/01/20 12:09  投稿

Java Realmでタイトルでのソートができません。
以下のようなコードを書きました。
年月日でのソートはできるようになりましたが、タイトルでのソートができませんでした。
タイトルでのソートを実行すると、何らかのソートをしているように見えますが、タイトルを参照したソートではありません。
繰り返しますが、年月日のソートは正常に動作し、タイトルのソートのみ正常に動作しません。
どうすれば正常に動作するでしょうか?
【タイトル欄に入力されている文字を「あいうえお順」または「ABC順」に並び替える動作】を正常な動作とします。  
・ソート処理部分(メニューから指定のボタンを押すと動作するようにしています)
```Javva
public boolean onOptionsItemSelected(MenuItem item) {
       int id = item.getItemId();
       if (id == R.id.action_settings) {
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll();
           schedules.sort("date", Sort.ASCENDING);
           ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true);
           mListView.setAdapter(adapter);
           Toast.makeText(this, "年月日を参照し昇順に並び替えました", Toast.LENGTH_SHORT).show();
           return true;
       }else if(id == R.id.action_settings2){
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll();
           schedules.sort("date", Sort.DESCENDING);
           ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true);
           mListView.setAdapter(adapter);
           Toast.makeText(this, "年月日を参照し降順に並び替えました", Toast.LENGTH_SHORT).show();
           return true;
       }else if(id == R.id.action_settings3) {
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll();
           schedules.sort("title", Sort.DESCENDING);
           ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true);
           mListView.setAdapter(adapter);
           Toast.makeText(this, "タイトルを参照し降順に並び替えました", Toast.LENGTH_SHORT).show();
           return true;
       }else if(id == R.id.action_settings4) {
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll();
           schedules.sort("title", Sort.DESCENDING);
           ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true);
           mListView.setAdapter(adapter);
           Toast.makeText(this, "タイトルを参照し降順に並び替えました", Toast.LENGTH_SHORT).show();
           return true;
       }
       return super.onOptionsItemSelected(item);
   }
```
・Scheduleクラス
```Java
public class Schedule extends RealmObject{
   @PrimaryKey
   private long id;
   private Date date;
   private String title;
   private String detail;
   public long getId() {
       return id;
   }
   public void setId(long id) {
       this.id = id;
   }
   public Date getDate() {
       return date;
   }
   public void setDate(Date date) {
       this.date = date;
   }
   public String getTitle() {
       return title;
   }
   public void setTitle(String title) {
       this.title = title;
   }
   public String getDetail() {
       return detail;
   }
   public void setDetail(String detail) {
       this.detail = detail;
   }
}
```
・ScheduleAdapterクラス
```Javapublic class ScheduleAdapter extends RealmBaseAdapter<Schedule> {
   private static class ViewHolder {
       TextView date;
       TextView title;
   }
   public ScheduleAdapter(Context context, RealmResults<Schedule> realmResults, boolean automaticUpdate) {
       super(context, realmResults, automaticUpdate);
   }
   @Override
   public View getView(int position, View convertView, ViewGroup parent) {
       ViewHolder viewHolder;
       if(convertView == null) {
           convertView = inflater.inflate(android.R.layout.simple_list_item_2, parent, false);
           viewHolder = new ViewHolder();
           viewHolder.date = (TextView) convertView.findViewById(android.R.id.text1);
           viewHolder.title = (TextView)convertView.findViewById(android.R.id.text2);
           convertView.setTag(viewHolder);
       } else {
           viewHolder = (ViewHolder)convertView.getTag();
       }
       Schedule schedule = realmResults.get(position);
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
       String formatDate = sdf.format(schedule.getDate());
       viewHolder.date.setText(formatDate);
       viewHolder.title.setText(schedule.getTitle());
       return convertView;
   }
}
```
・メニューXML内の指定部分
```Java
<item
       android:id="@+id/action_settings"
       android:orderInCategory="100"
       android:title="@string/action_settings"
       app:showAsAction="never" />
   <item
       android:id="@+id/action_settings2"
       android:orderInCategory="100"
       android:title="@string/action_settings2"
       app:showAsAction="never" />
   <item
       android:id="@+id/action_settings3"
       android:orderInCategory="100"
       android:title="@string/action_settings3"
       app:showAsAction="never" />
   <item
       android:id="@+id/action_settings4"
       android:orderInCategory="100"
       android:title="@string/action_settings4"
       app:showAsAction="never" />
```
  • Java

    15822 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    7297 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    4297 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

  • Realm

    258 questions

    RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

1 引用コード追加

sakanasann

sakanasann score 3

2017/01/20 12:01  投稿

Java Realmでタイトルでのソートができません。
以下のようなコードを書きました。
年月日でのソートはできるようになりましたが、タイトルでのソートができませんでした。
タイトルでのソートを実行すると、何らかのソートをしているように見えますが、タイトルを参照したソートではありません。
繰り返しますが、年月日のソートは正常に動作し、タイトルのソートのみ正常に動作しません。
どうすれば正常に動作するでしょうか?
・ソート処理部分(メニューから指定のボタンを押すと動作するようにしています)
```Javva
public boolean onOptionsItemSelected(MenuItem item) {
       int id = item.getItemId();
       if (id == R.id.action_settings) {
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll();
           schedules.sort("date", Sort.ASCENDING);
           ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true);
           mListView.setAdapter(adapter);
           Toast.makeText(this, "年月日を参照し昇順に並び替えました", Toast.LENGTH_SHORT).show();
           return true;
       }else if(id == R.id.action_settings2){
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll();
           schedules.sort("date", Sort.DESCENDING);
           ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true);
           mListView.setAdapter(adapter);
           Toast.makeText(this, "年月日を参照し降順に並び替えました", Toast.LENGTH_SHORT).show();
           return true;
       }else if(id == R.id.action_settings3) {
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll();
           schedules.sort("title", Sort.DESCENDING);
           ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true);
           mListView.setAdapter(adapter);
           Toast.makeText(this, "タイトルを参照し降順に並び替えました", Toast.LENGTH_SHORT).show();
           return true;
       }else if(id == R.id.action_settings4) {
           Realm realm = Realm.getInstance(this);
           RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll();
           schedules.sort("title", Sort.DESCENDING);
           ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true);
           mListView.setAdapter(adapter);
           Toast.makeText(this, "タイトルを参照し降順に並び替えました", Toast.LENGTH_SHORT).show();
           return true;
       }
       return super.onOptionsItemSelected(item);
   }
```
・Scheduleクラス
```Java
public class Schedule extends RealmObject{
   @PrimaryKey
   private long id;
   private Date date;
   private String title;
   private String detail;
   public long getId() {
       return id;
   }
   public void setId(long id) {
       this.id = id;
   }
   public Date getDate() {
       return date;
   }
   public void setDate(Date date) {
       this.date = date;
   }
   public String getTitle() {
       return title;
   }
   public void setTitle(String title) {
       this.title = title;
   }
   public String getDetail() {
       return detail;
   }
   public void setDetail(String detail) {
       this.detail = detail;
   }
}
```
・ScheduleAdapterクラス
```Javapublic class ScheduleAdapter extends RealmBaseAdapter<Schedule> {
   private static class ViewHolder {
       TextView date;
       TextView title;
   }
   public ScheduleAdapter(Context context, RealmResults<Schedule> realmResults, boolean automaticUpdate) {
       super(context, realmResults, automaticUpdate);
   }
   @Override
   public View getView(int position, View convertView, ViewGroup parent) {
       ViewHolder viewHolder;
       if(convertView == null) {
           convertView = inflater.inflate(android.R.layout.simple_list_item_2, parent, false);
           viewHolder = new ViewHolder();
           viewHolder.date = (TextView) convertView.findViewById(android.R.id.text1);
           viewHolder.title = (TextView)convertView.findViewById(android.R.id.text2);
           convertView.setTag(viewHolder);
       } else {
           viewHolder = (ViewHolder)convertView.getTag();
       }
       Schedule schedule = realmResults.get(position);
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
       String formatDate = sdf.format(schedule.getDate());
       viewHolder.date.setText(formatDate);
       viewHolder.title.setText(schedule.getTitle());
       return convertView;
   }
}
```  
・メニューXML内の指定部分  
```Java  
<item  
       android:id="@+id/action_settings"  
       android:orderInCategory="100"  
       android:title="@string/action_settings"  
       app:showAsAction="never" />  
   <item  
       android:id="@+id/action_settings2"  
       android:orderInCategory="100"  
       android:title="@string/action_settings2"  
       app:showAsAction="never" />  
   <item  
       android:id="@+id/action_settings3"  
       android:orderInCategory="100"  
       android:title="@string/action_settings3"  
       app:showAsAction="never" />  
   <item  
       android:id="@+id/action_settings4"  
       android:orderInCategory="100"  
       android:title="@string/action_settings4"  
       app:showAsAction="never" />  
```
  • Java

    15822 questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • Android

    7297 questions

    Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

  • Android Studio

    4297 questions

    Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

  • Realm

    258 questions

    RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る