Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何根据自定义listView的相似值对其进行排序_Java_Android - Fatal编程技术网

Java 如何根据自定义listView的相似值对其进行排序

Java 如何根据自定义listView的相似值对其进行排序,java,android,Java,Android,我是android studio的新手,我正在尝试开发一个包含自定义listview的应用程序,有没有办法按其值对项目进行排序 //前 一个苹果和一个类似的 2个橘子和3个喜欢的 3个香蕉加7个喜欢的** 我想按它的相似值对它进行排序 输出 1个香蕉和7个喜欢的 2个橘子和3个喜欢的 3个苹果和1个苹果** 提前谢谢大家!非常感谢示例项目。Kotlin通过扩展功能进行了分类,您可以如下所示使用它 class Fruit(val name: String, val startCount: Int)

我是android studio的新手,我正在尝试开发一个包含自定义listview的应用程序,有没有办法按其值对项目进行排序

//前

一个苹果和一个类似的 2个橘子和3个喜欢的 3个香蕉加7个喜欢的**

我想按它的相似值对它进行排序

输出

1个香蕉和7个喜欢的 2个橘子和3个喜欢的 3个苹果和1个苹果**


提前谢谢大家!非常感谢示例项目。

Kotlin通过扩展功能进行了分类,您可以如下所示使用它

class Fruit(val name: String, val startCount: Int) 

class FruitsAdapter() : RecyclerView.Adapter<FruitsAdapter.ViewHolder>() {

    private var fruitList = emptyList<Fruit>()

    override fun getItemCount() = fruitList.size

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_fruit, parent, false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val fruit = fruitList[position]
        holder.bindFruit(fruit)
    }

    fun updateFruits(newList: List<Fruit>) {
        fruitList = newList.sortedBy(Fruit::startCount)
        this.notifyDataSetChanged()

    }

    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        fun bindFruit(fruit: Fruit) {
            //Whatever you want
        }
    }
}



class MainActivity: Activity {


    private val adapter = FruitsAdapter()

    override fun onCreate(icicle: Bundle?) {
        super.onCreate(icicle)
        setContentView(R.layout.activity_splash_screen)

        val rvFruits = findViewById<RecyclerView>(R.id.rvFruits)

        rvFruits.adapter = adapter


        adapter.updateFruits(/*Your list*/ emptyList())
    }

}

我用这个解决了这个问题,谢谢你们

public class MainActivityCustonlistViewnew 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_maincustomlistview);
        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(MainActivityCustonlistViewnew.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);
    }
}```

到目前为止,您尝试了什么,为什么没有成功?@Aiexa alexa-Alexander-levely请注意,在将数据放入ListView之前,您必须对其进行排序。因为ListView是唯一一个以列表形式显示数据的视图。我搜索过实现相同方法的github项目,但是在ListView中它按字母顺序而不是按值进行排序。谢谢你的回答,我在使用java,有java代码吗?在java中,你可以使用@Eugene Troyanskii告诉你的类似接口。实现水果类的可比较接口,并使用Collections.sort方法进行排序。我只是简单地添加了以下内容:Arrays.sortnames,String.CASE\u-INSENSITIVE\u-ORDER;