Android排序数组
我正在尝试按字母顺序(按字串)对数组排序。在我把这行Android排序数组,android,arrays,sorting,Android,Arrays,Sorting,我正在尝试按字母顺序(按字串)对数组排序。在我把这行Arrays.sort(word,String.CASE\u-INSENSITIVE\u-ORDER)放进去之后,其他并行字符串数组(如example和flag)不再与单词位置匹配 如果单词字符串在排序后更改其位置,则其他字符串应链接到该字符串并更改其位置 public class MainActivity extends Activity implements SearchView.OnQueryTextListener {
Arrays.sort(word,String.CASE\u-INSENSITIVE\u-ORDER)放进去之后代码>,其他并行字符串数组(如example和flag)不再与单词位置匹配
如果单词字符串
在排序后更改其位置,则其他字符串应链接到该字符串并更改其位置
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;
}
}
public类MainActivity扩展活动实现
SearchView.OnQueryTextListener{
列表视图列表;
搜索视图;
ArrayList语言学家;
ListViewAdapter适配器;
字符串[]定义;
字符串[]字;
字符串[]示例;
int[]标志;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE\u ACTION\u栏);
//从listview_main.xml获取视图
setContentView(R.layout.listview_main);
//将示例数据生成到字符串数组中
word=新字符串[]{“bimbo”,
“心上人”,
“一无是处”};
定义=新字符串[]{“loira burra”,
“arrasa corações”,
“vagabundo”};
示例=新字符串[]{“她是一个真正的荡妇。”,
“他真是个令人心动的人。”,
“你在这里浪费时间干什么?找份工作,你一无是处!”;
flag=newint[]{R.drawable.bimbo,
R.drawable.Hearthob,
R.drawable.vagabundo};
**//问题就在这里**
**排序(字、字符串、不区分大小写的顺序)**
list=(ListView)findViewById(R.id.ListView);
mSearchView=(SearchView)findViewById(R.id.search\u视图);
vocabularylist=newArrayList();
for(int i=0;i
不要定义排序后必须按顺序关联的多个数组,而是创建一个包含所有所需属性(定义、单词和示例)的类,用该对象类型定义一个列表,并按所需条件进行排序
在排序结束时,您将与列表中的所有成员一致您需要定义一个类并实现可比较的接口:
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);
}
}
和使用:
Arrays.sort(dataArray);
现在所有索引都链接在一起了您已经有了一个对象,该对象集中存储了来自名为词汇表
的数组的所有数据,并且您的适配器正在使用您已经创建的那些对象的列表
您只需对词汇表进行如下排序:
Collections.sort(vocabularyList, new Comparator<Vocabulary>() {
@Override
public int compare(Vocabulary lhs, Vocabulary rhs) {
return lhs.getWord().compareToIgnoreCase(rhs.getWord());
}
});
此外,适配器应该只需要词汇列表
,因为该列表包含来自数组单词
、定义
、示例
和标志
的信息。如果在ListViewAdapter
中没有使用它们,您应该将它们从中删除。我定义了一个类数据并实现了可比较的接口。然后我更新了我的主活动putData[]dataArray
和数组。排序(dataArray)代码>如上所示。但是出了点问题。我的申请已停止并完成。看看我上面更新的帖子!您没有在dataArray中放入任何数据。是的,我试着把这个dataArray=newdata[]{“bimbo”,“loira burra”,“她是个真正的bimbo”,R.drawable.bimbo}代码>但msgerror显示一个红色标记:类型不匹配:无法从字符串转换为数据这不是它的工作方式。dataArray=新数据[];数据数组[0]。word=bimbo;dataArray[0]。标志=。。。。
Collections.sort(vocabularyList, new Comparator<Vocabulary>() {
@Override
public int compare(Vocabulary lhs, Vocabulary rhs) {
return lhs.getWord().compareToIgnoreCase(rhs.getWord());
}
});
adapter = new ListViewAdapter(getApplicationContext(), vocabularylist,
word, definition, example, flag);