2016-05-01 6 views
-2

アルファベット順に配列をソートしようとしています(単語列で)。私はこの行をArrays.sort(word, String.CASE_INSENSITIVE_ORDER);と置いた後、exampleとflagのような他の並列文字列配列はもはや単語位置と一致しません。Androidソート配列

word stringがソートされた後にその位置が変更された場合、他の文字列はそれにリンクして位置を変更する必要があります。

public class MainActivity extends Activity implements 
    SearchView.OnQueryTextListener { 

    ListView list; 
    SearchView mSearchView; 

    ArrayList<Vocabulary> vocabularylist; 
    ListViewAdapter adapter; 
    String[] definition; 
    String[] word; 
    String[] example; 
    int[] flag; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 
     // Get the view from listview_main.xml 
     setContentView(R.layout.listview_main); 

     // Generate sample data into string arrays 
     word = new String[] { "bimbo", 
        "heartthrob", 
        "good-for-nothing"}; 

     definition = new String[] { "loira burra", 
            "arrasa-corações", 
            "vagabundo"}; 

     example = new String[] { "She's a real bimbo.", 
           "He's a real heartthrob.", 
           "What are you doing wasting time here? Get a job, you good-for-nothing!"}; 

     flag = new int[] { R.drawable.bimbo, 
          R.drawable.heartthrob, 
          R.drawable.vagabundo}; 

     **// THE PROBLEM IS HERE**   
      **Arrays.sort(word, String.CASE_INSENSITIVE_ORDER);** 
     list = (ListView) findViewById(R.id.listview); 
     mSearchView = (SearchView) findViewById(R.id.search_view); 

     vocabularylist = new ArrayList<Vocabulary>(); 
     for (int i = 0; i < word.length; i++) { 
      Vocabulary vocabulary = new Vocabulary(word[i], definition[i], example[i], 
        flag[i]); 
      vocabularylist.add(vocabulary); 
     } 

     // Pass results to ListViewAdapter Class 

     adapter = new ListViewAdapter(getApplicationContext(), vocabularylist, word, definition, example, flag); 
     // Binds the Adapter to the ListView 
     list.setAdapter(adapter); 

     list.setTextFilterEnabled(true); 
     setupSearchView(); 
     // Capture ListView item click 
     list.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       Intent i = new Intent(MainActivity.this, SingleItemView.class); 
       // Pass all data definition 

       Vocabulary voc = (Vocabulary) adapter.getItem(position); 

       i.putExtra("definition", voc.getDefinition()); 
       // Pass word 
       i.putExtra("word", voc.getWord()); 
       // Pass example 
       i.putExtra("example", voc.getExample()); 
       // Pass flag 
       i.putExtra("flag", voc.getFlag()); 
       // Pass position 
       i.putExtra("position", position); 
       // Open SingleItemView.java Activity 
       startActivity(i); 

      } 
     }); 
    } 

    private void setupSearchView() { 
     mSearchView.setIconifiedByDefault(false); 
     mSearchView.setOnQueryTextListener(this); 
     mSearchView.setSubmitButtonEnabled(false); 
     mSearchView.setQueryHint("Pesquise aqui..."); 
    } 

    public boolean onQueryTextChange(String newText) { 
     adapter.getFilter().filter(newText); 
     return false; 
    } 

    public boolean onQueryTextSubmit(String query) { 
     return false; 
    } 
} 

答えて

1

あなた一緒にリンクされていますVocabularyという配列からすべてのデータを一括して格納するオブジェクトを既に持っていて、アダプタはすでに作成したオブジェクトのリストを使用しています。

次のようにあなたがする必要があるのは、ソートvocabularyListです:

Collections.sort(vocabularyList, new Comparator<Vocabulary>() { 
    @Override 
    public int compare(Vocabulary lhs, Vocabulary rhs) { 
     return lhs.getWord().compareToIgnoreCase(rhs.getWord()); 
    } 
}); 

をあなたはちょうどその価値アダプタを割り当てる前にこれを追加することができます。そのリストは、配列worddefinitionexample、およびflagからの情報が含まれているため

adapter = new ListViewAdapter(getApplicationContext(), vocabularylist, 
           word, definition, example, flag); 

また、アダプターはvocabularyListを必要とするだけ必要があります。 ListViewAdapterからそれらを削除する必要があります。

+0

@Geoger Mulligan、もう一度私を救った!どうもありがとう!! –

1

の代わりにソートした後、順番に関連付けられている必要があります複数の配列を定義し、あなたは(定義、言葉ANS例)を必要とするすべての属性を持つクラスを作成し、そのオブジェクトタイプとONEリストを定義してそれを並べ替えますsortimeの終わりに所望の基準

あなたは、クラスを定義して、同等のインタフェースを実装する必要がリスト

1

内のすべてのmembersameで一致を取得します:

public class Data implements Comparable<Data> { 
    String definition; 
    String word; 
    String example; 
    int flag; 

    public int compareTo(Data data) 
    { 
    return this.word.compareTo(data.word); 
    } 
} 

、代わりに単語、例を定義する、...データの配列を定義:

Data[] dataArray; 

と使用:今のすべてのインデックスを

Arrays.sort(dataArray); 

+0

私はクラスDataを定義し、比較可能なインターフェイスを実装しました。次に、MainActivityを更新しました。上記のように 'Data [] dataArray;と' Arrays.sort(dataArray); 'を入れました。しかし、何かが間違っていた。私のアプリケーションは停止して終了します。上記の更新された投稿を見てください! –

+0

あなたはdataArrayにデータを入れませんでした。これはnullです – Pooya

+0

ええ、私はこの 'dataArray = new Data [] {" bimbo "、" loira burra "、"彼女は本当のビンボ "、R.drawable.bimbo}を入れようとしました。 msgerror:型の不一致:文字列からデータに変換できません –