如何过滤Android中的对象列表

时间:2015-12-14 15:54:41

标签: java android listadapter

我正在尝试创建一个Android应用程序(新手)!

我的问题如下:
假设我是X大学的管理员 我需要列出每个不同点的课程清单。

例如:

  • 医药:30
  • 物理:28
  • 数学:24
  • 英语:20

现在假设学生进入第28点。

我的应用应该能够检测到有28分但低分的路线。那是;物理,数学和英语但不是医学!!!

任何人都可以帮我这个吗?我到处搜索但没有结果!

请大家好好做这件事!谢谢!

MainActivity.java

import android.os.Bundle;
import android.app.Activity;
import android.view.LayoutInflater; 
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;


 public class MainActivity extends  Activity {


  String[] courses = new String[]{

        "Mathematics",
        "Chemical Engineering",
        "Civil Engineering",
        "Agriculture",
        "Law and Management",
        "Sociology",
        "Information and Communication Technologies",
        "Computer Science",
        "Information Systems",
        "Software Engineering",


};

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.event2icon);
    EditText editText = null;
    editText=(EditText)findViewById(R.id.edit_text);
    final String point=editText.getText().toString();
    final int point_integer=Integer.parseInt(point);


    final ListView courselist = (ListView)findViewById(R.id.courseNames);


    LayoutInflater inflater = getLayoutInflater();
    ViewGroup header = (ViewGroup)inflater.inflate(R.layout.listviewheader,  courselist, false);
    courselist.addHeaderView(header, null, false);


    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,  android.R.layout.simple_list_item_1, courses);
    courselist.setAdapter(adapter);
    courselist.setOnItemClickListener(new OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int   position, long id) {
            // TODO Auto-generated method stub

            //we use the items of the listview as title of the next activity
            if((Integer.parseInt(String.valueOf(point_integer))<=10))
            {


            }
        }

      });

  }
 }

event2icon.xml

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

    <EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/edit_text"
    android:text="Enter your points:"/>
     <ListView
    android:id="@+id/courseNames"
    android:layout_width="match_parent"
    android:layout_below="@+id/edit_text"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:dividerHeight="15.0sp"
        >
   </ListView>


  </LinearLayout>

listviewheader.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>


</LinearLayout>

2 个答案:

答案 0 :(得分:3)

你应该能够执行他在答案中提到的所有步骤,否则,我害怕我只是给你一些不会教你的代码。

相反,我将为您提供其他答案中提到的部分。

  

您想要一个代表课程的课程,包括姓名和分数字段

这是一个简单的模型类。 Java课程的介绍教会了这些。

public class Course {

    private String name;
    private int points;

    public Course(String name, int points) {
        this.name = name;
        this.points = points;
    }

    public String getName() {
        return name;
    }

    public int getPoints() {
        return points;
    }

    @Override
    public String toString() {
        return getName();
    }
}
  

包含这些课程实例的列表

您只有字符串,而不是代码中列出的点数,那么您希望如何使用数字来过滤课程?以下是您列为数组的示例课程示例。

Course[] courses = new Course[]{
        new Course("Medicine", 30),
        new Course("Physics", 28),
        new Course("Math", 24),
        new Course("English", 20)
};
  

您需要一个活动,其中包含一个文本框,供学生输入数字

这需要您编写一些XML,您已经在event2icon.xml中完成了。我建议您添加Button,但是因为在EditText内点击Enter会插入换行符。在创建时,您也可以只接受数字。这是我建议的完整XML。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">

    <LinearLayout android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:orientation="horizontal">
        <EditText
                android:layout_width="0dp"
                android:layout_weight="1"
                android:maxLines="1"
                android:inputType="number"
                android:layout_height="wrap_content"
                android:hint="Enter your points"
                android:id="@+id/editText"/>
        <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Search"
                android:id="@+id/btn_search"/>
    </LinearLayout>

    <ListView
            android:id="@+id/courseNames"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
</LinearLayout>
  

您需要将文本解析为整数

你知道如何做到这一点 - 问题,但时这样做了吗?一旦加载了Activity,您发布的代码会立即从EditText中获取文本,该文本将为空。您应该在单击按钮时从EditText中提取文本。这将帮助您入门。

Button searchButton = (Button) findViewById(R.id.btn_search);
searchButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
  

您需要迭代您定义的列表。通过使用小于或等于运算符&lt; =,您将找到所需的课程

这只是您定义的Courses数组的简单for-each循环。找到Course对象后,将其添加到适配器。您还应该知道,为了做到这一点,您需要将Course[]转换为List<Course>,否则您将收到错误消息。

List<Course> courseList = new ArrayList<Course>(Arrays.asList(courses));
// initialize the adapter with courseList instead of courses 
final ArrayAdapter<Course> adapter = new ArrayAdapter<Course>(this, android.R.layout.simple_list_item_1, courseList);

// this code inside the Button's onClick
int points = Integer.parseInt(editText.getText().toString());
for (Course c : courses) {
    if (c.getPoints() <= points) {
        adapter.add(c);
    }
}
  

使用ListAdapter很好地显示列表

你已经拥有ArrayAdapter,所以你在这里很好。但最后一个细节是,当您单击Button时,您应首先clear适配器,然后再将课程添加回其中。否则,您将获得重复项。

答案 1 :(得分:2)

你没有找到任何东西,因为你需要解决问题并研究每一点:

  • 您想要一个代表课程的课程,包括姓名和分数 字段。

  • 包含这些课程实例的列表(如您所列)。

  • 您需要一个包含供学生输入的文本框的活动 号码进入。

  • 您需要将文本解析为整数。

  • 您需要迭代您定义的列表。

  • 通过使用小于或等于运算符<=,您将找到 你需要的课程。

  • 在Android中你应该使用a ListAdapter 很好地显示清单。