Java 如何在自定义ListView中按字母顺序排序

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"

我需要在自定义列表视图中按字母顺序排序。在列表项中,我有TextImage和两个TextView(应用程序名、包名),无法理解如何按字母表应用程序名排序:

我的清单项目:

<?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);
    }
}```