Java 如何在自定义ListView中按字母顺序排序
我需要在自定义列表视图中按字母顺序排序。在列表项中,我有TextImage和两个TextView(应用程序名、包名),无法理解如何按字母表应用程序名排序: 我的清单项目:Java 如何在自定义ListView中按字母顺序排序,java,android,sorting,listview,android-listview,Java,Android,Sorting,Listview,Android Listview,我需要在自定义列表视图中按字母顺序排序。在列表项中,我有TextImage和两个TextView(应用程序名、包名),无法理解如何按字母表应用程序名排序: 我的清单项目: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal">
<ImageView
android:id="@+id/app_icon"
android:layout_width="56dp"
android:layout_height="56dp"
android:padding="4dp"
android:scaleType="centerCrop"
android:contentDescription="@null"
tools:src="@mipmap/ic_launcher" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|center_vertical"
android:orientation="vertical"
android:paddingLeft="8dp">
<TextView
android:id="@+id/tv_app_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:textStyle="bold"
tools:text="Application name"/>
<TextView
android:id="@+id/tv_app_package"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:textStyle="bold"
tools:text="app.package.name"/>
</LinearLayout>
</LinearLayout>
显示ListView的我的片段
public class ResultFragment extends ListFragment {
private PackageManager packageManager = null;
private ListViewAdapter listViewAdapter = null;
private List mItem;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
packageManager = getContext().getPackageManager();
new LoadApplications().execute();
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
ApplicationInfo applicationInfo = (ApplicationInfo) mItem.get(position);
try{
Intent intent = packageManager.getLaunchIntentForPackage(applicationInfo.packageName);
if (intent != null){
startActivity(intent);
}
}catch (ActivityNotFoundException e){
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show();
}catch (Exception e){
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_LONG).show();
}
}
private List<ApplicationInfo> checkForLauncherIntent(List<ApplicationInfo> list){
ArrayList mItem = new ArrayList();
for(ApplicationInfo info : list) {
try{
if(packageManager.getLaunchIntentForPackage(info.packageName) != null) {
mItem.add(info);
}
} catch(Exception e) {
e.printStackTrace();
}
}
return mItem;
}
private class LoadApplications extends AsyncTask<Void, Void, Void>{
private ProgressDialog progressDialog = null;
@Override
protected Void doInBackground(Void... params){
mItem = checkForLauncherIntent(packageManager.getInstalledApplications(PackageManager.GET_META_DATA));
listViewAdapter = new ListViewAdapter(getActivity(), R.layout.list_item, mItem);
return null;
}
@Override
protected void onPostExecute(Void result){
setListAdapter(listViewAdapter);
progressDialog.dismiss();
super.onPostExecute(result);
}
@Override
protected void onPreExecute(){
progressDialog = ProgressDialog.show(getActivity(), null, "Loading file info...");
super.onPreExecute();
}
}
}
公共类ResultFragment扩展了ListFragment{
私有PackageManager PackageManager=null;
私有ListViewAdapter ListViewAdapter=null;
私有列表;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@凌驾
已创建视图上的公共void(视图,捆绑保存状态){
super.onViewCreated(视图,savedInstanceState);
packageManager=getContext().getPackageManager();
新建LoadApplications().execute();
}
@凌驾
public void onListItemClick(列表视图l、视图v、整数位置、长id){
super.onListItemClick(左、右、位置、id);
ApplicationInfo ApplicationInfo=(ApplicationInfo)mItem.get(位置);
试一试{
Intent Intent=packageManager.getLaunchIntentForPackage(applicationInfo.packageName);
if(intent!=null){
星触觉(意向);
}
}捕获(ActivityNotFounde异常){
Toast.makeText(getActivity(),e.getMessage(),Toast.LENGTH_LONG.show();
}捕获(例外e){
Toast.makeText(getActivity(),e.getMessage(),Toast.LENGTH_LONG.show();
}
}
专用列表checkForLauncherIntent(列表列表){
ArrayList mItem=新的ArrayList();
用于(应用程序信息:列表){
试一试{
if(packageManager.getLaunchIntentForPackage(info.packageName)!=null){
添加(信息);
}
}捕获(例外e){
e、 printStackTrace();
}
}
返螨;
}
私有类装入应用程序扩展异步任务{
private ProgressDialog ProgressDialog=null;
@凌驾
受保护的Void doInBackground(Void…参数){
mItem=checkForLauncherIntent(packageManager.GetInstalledApplication(packageManager.GET_META_DATA));
listViewAdapter=新的listViewAdapter(getActivity(),R.layout.list_项,mItem);
返回null;
}
@凌驾
受保护的void onPostExecute(void结果){
setListAdapter(listViewAdapter);
progressDialog.disclose();
super.onPostExecute(结果);
}
@凌驾
受保护的void onPreExecute(){
progressDialog=progressDialog.show(getActivity(),null,“正在加载文件信息…”);
super.onPreExecute();
}
}
}
请帮我按字母顺序排列列表。首先将中文改为拼音,您可以使用jar
那么也许你可以试试这个方法
Arrays.sort(arrayList,String.CASE不区分大小写\u顺序)代码>来自Android文档
公开摘要android.content.Intent
getLaunchIntentForPackage(java.lang.String packageName)
返回一个
“良好”意图以一揽子形式启动前门活动。这是
例如,用于在浏览时实现“打开”按钮
包装。当前实现首先查找主活动
在category Intent.category_INFO中,下一步为
category Intent.category_启动器。如果两者都不是,则返回null
找到了
Parameters:packageName—要检查的包的名称
返回:完全限定的意图,可用于启动主
包中的活动。如果包不包含,则返回null
此类活动,或者如果未识别packageName
您需要对代码进行一些更改
private ArrayList<ResolveInfo> checkForLauncherIntent(List<ApplicationInfo> list){
ArrayList<ResolveInfo> mItems = new ArrayList();
for(ApplicationInfo info : list) {
try{
if(packageManager.getLaunchIntentForPackage(info.packageName) != null) {
Intent intent = packageManager.getLaunchIntentForPackage(info.packageName));
ResolveInfo app = packageManager.resolveActivity(intent,0);
mItems.add(app);
}
} catch(Exception e) {
e.printStackTrace();
}
}
return mItems;
}
private ArrayList checkForLauncherIntent(列表
找到整个项目这样做会奏效的
像这样创建一个类比较器
public class CustomComparator implements Comparator<ApplicationInfo> {
@Override
public int compare(ApplicationInfo o1, ApplicationInfo o2) {
return o1.loadLabel(packageManager).toString().compareTo(o2.loadLabel(packageManager).toString());
}
}
它将对您的列表进行排序
如果有更多问题请告诉我当您需要在listview中排序时,请使用此方法
Collections.sort(apps, new Comparator<App>() {
@Override
public int compare(App lhs, App rhs) {
//here getTitle() method return app name...
return lhs.getTitle().compareTo(rhs.getTitle());
}
});
Collections.sort(应用程序、新比较器(){
@凌驾
公共整数比较(应用程序左侧、应用程序右侧){
//此处getTitle()方法返回应用程序名称。。。
返回lhs.getTitle().compareTo(rhs.getTitle());
}
});
请试试这个
public class MainActivity extends AppCompatActivity {
private ArrayList<UserInfo> userInfos;
private CustomListAdapter customListAdapter;
private ListView customListView;
private String[] names={
"3 Khan",
"2 Ahmed",
"1 Iqbal"
};
private String[] professions={
"Rank 1",
"Rank 2",
"Rank 3"
};
private int[] photos={
R.drawable.sample_5,
R.drawable.sample_1,
R.drawable.sample_6
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setSupportActionBar((Toolbar)findViewById(R.id.toolbar));
customListView=(ListView)findViewById(R.id.custom_list_view);
userInfos=new ArrayList<>();
Arrays.sort(names,String.CASE_INSENSITIVE_ORDER);
customListAdapter=new CustomListAdapter(userInfos,this);
customListView.setAdapter(customListAdapter);
getDatas();
customListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this, "Name : " + names[i] + "\n Profession : " + professions[i], Toast.LENGTH_SHORT).show();
}
});
}
// getting all the datas
private void getDatas(){
for(int count=0;count<names.length;count++){
userInfos.add(new UserInfo(names[count],professions[count],photos[count]));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.search_option,menu);
MenuItem menuItem=menu.findItem(R.id.search);
SearchView searchView=(SearchView)menuItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
newText=newText.toString();
ArrayList<UserInfo> newUserInfos=new ArrayList<>();
for(UserInfo userInfo:userInfos){
String name=userInfo.getName().toLowerCase();
String profession=userInfo.getProfession().toLowerCase();
if(name.contains(newText) || profession.contains(newText)){
newUserInfos.add(userInfo);
}
}
customListAdapter.filterResult(newUserInfos);
customListAdapter.notifyDataSetChanged();
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
}```
public类MainActivity扩展了AppCompatActivity{
私有ArrayList用户信息;
私有CustomListAdapter CustomListAdapter;
私有ListView自定义ListView;
私有字符串[]名称={
“3可汗”,
“2艾哈迈德”,
“1伊克巴尔”
};
私人字符串[]专业={
“排名1”,
“排名2”,
“排名3”
};
私人int[]照片={
R.可拉拔样品_5,
R.可拉拔样品1,
R.可拉拔样品_6
};
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setSupportActionBar((工具栏)findViewById(R.id.Toolbar));
customListView=(ListView)findViewById(R.id.custom\u list\u视图);
userInfos=newarraylist();
Arrays.sort(名称、字符串、不区分大小写的顺序);
customListAdapter=新的customListAdapter(userInfos,this);
setAdapter(customListAdapter);
getDatas();
customListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
Toast.makeText(MainActivity.this,“Name:+names[i]+”\n professional:+professions[i],Toast.LENGTH\u SHORT.show();
}
});
}
//获取所有数据
脉波重复间隔
public class CustomComparator implements Comparator<ApplicationInfo> {
@Override
public int compare(ApplicationInfo o1, ApplicationInfo o2) {
return o1.loadLabel(packageManager).toString().compareTo(o2.loadLabel(packageManager).toString());
}
}
Collections.sort(mItem, new CustomComparator());
listViewAdapter = new ListViewAdapter(context, mItem);
Collections.sort(apps, new Comparator<App>() {
@Override
public int compare(App lhs, App rhs) {
//here getTitle() method return app name...
return lhs.getTitle().compareTo(rhs.getTitle());
}
});
public class MainActivity extends AppCompatActivity {
private ArrayList<UserInfo> userInfos;
private CustomListAdapter customListAdapter;
private ListView customListView;
private String[] names={
"3 Khan",
"2 Ahmed",
"1 Iqbal"
};
private String[] professions={
"Rank 1",
"Rank 2",
"Rank 3"
};
private int[] photos={
R.drawable.sample_5,
R.drawable.sample_1,
R.drawable.sample_6
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setSupportActionBar((Toolbar)findViewById(R.id.toolbar));
customListView=(ListView)findViewById(R.id.custom_list_view);
userInfos=new ArrayList<>();
Arrays.sort(names,String.CASE_INSENSITIVE_ORDER);
customListAdapter=new CustomListAdapter(userInfos,this);
customListView.setAdapter(customListAdapter);
getDatas();
customListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(MainActivity.this, "Name : " + names[i] + "\n Profession : " + professions[i], Toast.LENGTH_SHORT).show();
}
});
}
// getting all the datas
private void getDatas(){
for(int count=0;count<names.length;count++){
userInfos.add(new UserInfo(names[count],professions[count],photos[count]));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.search_option,menu);
MenuItem menuItem=menu.findItem(R.id.search);
SearchView searchView=(SearchView)menuItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
newText=newText.toString();
ArrayList<UserInfo> newUserInfos=new ArrayList<>();
for(UserInfo userInfo:userInfos){
String name=userInfo.getName().toLowerCase();
String profession=userInfo.getProfession().toLowerCase();
if(name.contains(newText) || profession.contains(newText)){
newUserInfos.add(userInfo);
}
}
customListAdapter.filterResult(newUserInfos);
customListAdapter.notifyDataSetChanged();
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
}```