以下のようなコードを書きました。
年月日でのソートはできるようになりましたが、タイトルでのソートができませんでした。
タイトルでのソートを実行すると、何らかのソートをしているように見えますが、タイトルを参照したソートではありません。
繰り返しますが、年月日のソートは正常に動作し、タイトルのソートのみ正常に動作しません。
どうすれば正常に動作するでしょうか?
年月日ソートの正常な動作の定義:【年月日入力欄に入力されている数字を昇順降順に並び替える動作】(こちらは現在正常な動作をしているように見えます)
タイトルソートの正常な動作の定義:
【タイトル欄に入力されている文字を「あいうえお順」または「ABC順」に並び替える動作】(こちらが正常な動作をしていません)
・ソート処理部分(メニューから指定のボタンを押すと動作するようにしています)
Javva
1 public boolean onOptionsItemSelected(MenuItem item) { 2 int id = item.getItemId(); 3 4 if (id == R.id.action_settings) { 5 Realm realm = Realm.getInstance(this); 6 RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll(); 7 schedules.sort("date", Sort.ASCENDING); 8 ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true); 9 mListView.setAdapter(adapter); 10 Toast.makeText(this, "年月日を参照し昇順に並び替えました", Toast.LENGTH_SHORT).show(); 11 return true; 12 }else if(id == R.id.action_settings2){ 13 Realm realm = Realm.getInstance(this); 14 RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll(); 15 schedules.sort("date", Sort.DESCENDING); 16 ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true); 17 mListView.setAdapter(adapter); 18 Toast.makeText(this, "年月日を参照し降順に並び替えました", Toast.LENGTH_SHORT).show(); 19 return true; 20 }else if(id == R.id.action_settings3) { 21 Realm realm = Realm.getInstance(this); 22 RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll(); 23 schedules.sort("title", Sort.DESCENDING); 24 ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true); 25 mListView.setAdapter(adapter); 26 Toast.makeText(this, "タイトルを参照し降順に並び替えました", Toast.LENGTH_SHORT).show(); 27 return true; 28 }else if(id == R.id.action_settings4) { 29 Realm realm = Realm.getInstance(this); 30 RealmResults<Schedule> schedules = realm.where(Schedule.class).findAll(); 31 schedules.sort("title", Sort.DESCENDING); 32 ScheduleAdapter adapter = new ScheduleAdapter(this, schedules, true); 33 mListView.setAdapter(adapter); 34 Toast.makeText(this, "タイトルを参照し降順に並び替えました", Toast.LENGTH_SHORT).show(); 35 return true; 36 } 37 return super.onOptionsItemSelected(item); 38 }
・Scheduleクラス
Java
1public class Schedule extends RealmObject{ 2 @PrimaryKey 3 private long id; 4 private Date date; 5 private String title; 6 private String detail; 7 8 public long getId() { 9 return id; 10 } 11 12 public void setId(long id) { 13 this.id = id; 14 } 15 16 public Date getDate() { 17 return date; 18 } 19 20 public void setDate(Date date) { 21 this.date = date; 22 } 23 24 public String getTitle() { 25 return title; 26 } 27 28 public void setTitle(String title) { 29 this.title = title; 30 } 31 32 public String getDetail() { 33 return detail; 34 } 35 36 public void setDetail(String detail) { 37 this.detail = detail; 38 } 39} 40
・ScheduleAdapterクラス
Javapublic
1 2 private static class ViewHolder { 3 TextView date; 4 TextView title; 5 } 6 7 public ScheduleAdapter(Context context, RealmResults<Schedule> realmResults, boolean automaticUpdate) { 8 super(context, realmResults, automaticUpdate); 9 } 10 11 @Override 12 public View getView(int position, View convertView, ViewGroup parent) { 13 ViewHolder viewHolder; 14 if(convertView == null) { 15 convertView = inflater.inflate(android.R.layout.simple_list_item_2, parent, false); 16 viewHolder = new ViewHolder(); 17 viewHolder.date = (TextView) convertView.findViewById(android.R.id.text1); 18 viewHolder.title = (TextView)convertView.findViewById(android.R.id.text2); 19 convertView.setTag(viewHolder); 20 } else { 21 viewHolder = (ViewHolder)convertView.getTag(); 22 } 23 24 Schedule schedule = realmResults.get(position); 25 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 26 String formatDate = sdf.format(schedule.getDate()); 27 viewHolder.date.setText(formatDate); 28 viewHolder.title.setText(schedule.getTitle()); 29 30 return convertView; 31 } 32}
・ScheduleEditActivityクラスの内容の一部
Java
1 @Override 2 protected void onCreate(Bundle savedInstanceState) { 3 super.onCreate(savedInstanceState); 4 setContentView(R.layout.activity_schedule_edit); 5 mDateEdit= (EditText) findViewById(R.id.dateEdit); 6 mTitleEdit= (EditText) findViewById(R.id.titleEdit); 7 mDetailEdit = (EditText) findViewById(R.id.detailEdit); 8 mDelete = (Button) findViewById(R.id.delete); 9 long scheduleId = getIntent().getLongExtra("schedule_id", -1); 10 if (scheduleId != -1) { 11 Realm realm = Realm.getInstance(this); 12 RealmResults<Schedule> results = realm.where(Schedule.class) 13 .equalTo("id", scheduleId).findAll(); 14 Schedule schedule = results.first(); 15 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 16 String date = sdf.format(schedule.getDate()); 17 mDateEdit.setText(date); 18 mTitleEdit.setText(schedule.getTitle()); 19 mDetailEdit.setText(schedule.getDetail()); 20 mDelete.setVisibility(View.VISIBLE); 21 } else { 22 mDelete.setVisibility(View.INVISIBLE); 23 } 24 25 } 26 public void onSaveTapped(View view) { 27 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); 28 Date date = new Date(); 29 try { 30 date = sdf.parse(mDateEdit.getText().toString()); 31 } catch (ParseException e) { 32 e.printStackTrace(); 33 } 34 long scheduleId = getIntent().getLongExtra("schedule_id", -1); 35 if (scheduleId != -1) { 36 Realm realm = Realm.getInstance(this); 37 RealmResults<Schedule> results = realm.where(Schedule.class) 38 .equalTo("id", scheduleId).findAll(); 39 realm.beginTransaction(); 40 Schedule schedule = results.first(); 41 schedule.setDate(date); 42 schedule.setTitle(mTitleEdit.getText().toString()); 43 schedule.setDetail(mDetailEdit.getText().toString()); 44 realm.commitTransaction(); 45 Snackbar.make(findViewById(android.R.id.content), "更新しました" 46 , Snackbar.LENGTH_SHORT) 47 .setAction("戻る", new View.OnClickListener() { 48 @Override 49 public void onClick(View v) { 50 finish(); 51 } 52 }) 53 .setActionTextColor(Color.YELLOW) 54 .show(); 55 } else { 56 Realm realm = Realm.getInstance(this); 57 realm.beginTransaction(); 58 Number maxId = realm.where(Schedule.class).max("id"); 59 long nextId = 1; 60 if (maxId != null) nextId = maxId.longValue() + 1; 61 Schedule schedule = realm.createObject(Schedule.class); 62 schedule.setId(nextId); 63 schedule.setDate(date); 64 schedule.setTitle(mTitleEdit.getText().toString()); 65 schedule.setDetail(mDetailEdit.getText().toString()); 66 realm.commitTransaction(); 67 Toast.makeText(this, "追加しました", Toast.LENGTH_SHORT).show(); 68 finish(); 69
・メニューXML内の指定部分
Java
1<item 2 android:id="@+id/action_settings" 3 android:orderInCategory="100" 4 android:title="@string/action_settings" 5 app:showAsAction="never" /> 6 <item 7 android:id="@+id/action_settings2" 8 android:orderInCategory="100" 9 android:title="@string/action_settings2" 10 app:showAsAction="never" /> 11 <item 12 android:id="@+id/action_settings3" 13 android:orderInCategory="100" 14 android:title="@string/action_settings3" 15 app:showAsAction="never" /> 16 <item 17 android:id="@+id/action_settings4" 18 android:orderInCategory="100" 19 android:title="@string/action_settings4" 20 app:showAsAction="never" />
回答1件
あなたの回答
tips
プレビュー