3030import org .litepal .crud .DataSupport ;
3131
3232import java .io .IOException ;
33+ import java .text .Collator ;
3334import java .util .ArrayList ;
35+ import java .util .Collections ;
36+ import java .util .Comparator ;
3437import java .util .List ;
3538
3639import rx .Observable ;
@@ -83,7 +86,9 @@ private void getWords() {
8386 Observable <List <Word >> database = Observable .create (new Observable .OnSubscribe <List <Word >>() {
8487 @ Override
8588 public void call (Subscriber <? super List <Word >> subscriber ) {
86- List <Word > words = DataSupport .findAll (Word .class );
89+ List <Word > words = DataSupport
90+ .where ("sourceFrom =?" , String .valueOf (Word .From .NETWORK .getFrom ()))
91+ .find (Word .class );
8792 if (words == null || words .isEmpty ()) {
8893 subscriber .onCompleted ();
8994 } else {
@@ -111,13 +116,13 @@ public List<Word> call(String url) {
111116 Word word = new Word ();
112117 word .setName (tds .get (0 ).ownText ());
113118 Element a = tds .get (0 ).select ("a" ).first ();
114- word .setVoice (a == null ? "" : a .attr ("href" ));
115- word .setCorrect (tds .get (1 ).ownText ());
116- word .setWrong (tds .get (2 ).ownText ());
119+ word .setVoiceUrl (a == null ? "" : a .attr ("href" ));
120+ word .setCorrectPhonetic (tds .get (1 ).ownText ());
121+ word .setWrongPhonetic (tds .get (2 ).ownText ());
122+ word .setSourceFrom (Word .From .NETWORK );
117123 words .add (word );
118124 }
119125 }
120- DataSupport .deleteAll (Word .class );
121126 DataSupport .saveAll (words );
122127 return words ;
123128 }
@@ -143,13 +148,25 @@ public void onError(Throwable e) {
143148
144149 @ Override
145150 public void onNext (List <Word > words ) {
146- tvTotal .setText (String .format ("总计:%s个" , words .size ()));
147- adapter .setNewData (words );
151+ List <Word > allWords = DataSupport .findAll (Word .class );
152+ tvTotal .setText (String .format ("总计:%s个" , allWords .size ()));
153+ adapter .setNewData (allWords );
154+ sortData ();
148155 }
149156 });
150157
151158 }
152159
160+ private void sortData () {
161+ final Collator collator = Collator .getInstance ();
162+ Collections .sort (adapter .getData (), new Comparator <Word >() {
163+ @ Override
164+ public int compare (Word o1 , Word o2 ) {
165+ return collator .compare (o1 .getName (), o2 .getName ());
166+ }
167+ });
168+ }
169+
153170 @ Override
154171 public boolean onCreateOptionsMenu (Menu menu ) {
155172 getMenuInflater ().inflate (R .menu .menu_main , menu );
@@ -168,7 +185,7 @@ public boolean onOptionsItemSelected(MenuItem item) {
168185 startActivity (intent );
169186 return true ;
170187 } else if (id == R .id .action_sync ) {
171- DataSupport .deleteAll (Word .class );
188+ DataSupport .deleteAll (Word .class , "sourceFrom =?" , String . valueOf ( Word . From . NETWORK . getFrom ()) );
172189 getWords ();
173190 return true ;
174191 } else if (id == R .id .action_cache ) {
@@ -234,12 +251,14 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
234251 Word word = (Word ) data .getSerializableExtra (QueryActivity .EXTRA_WORD );
235252 if (adapter .getData ().contains (word )) {
236253 Toast .makeText (this , "列表中已包含 " + word .getName (), Toast .LENGTH_SHORT ).show ();
237- } else if (word .getCorrect ().contains ("null" )) {
254+ } else if (word .getCorrectPhonetic ().contains ("null" )) {
238255 Toast .makeText (this , "该单词没有找到合适的读法" , Toast .LENGTH_SHORT ).show ();
239256 } else {
240257 word .save ();
241258 adapter .addData (word );
242- recyclerView .scrollToPosition (adapter .getData ().size () - 1 );
259+ sortData ();
260+ int wordIndex = adapter .getData ().indexOf (word );
261+ recyclerView .scrollToPosition (wordIndex );
243262 }
244263 }
245264 }
0 commit comments