过滤SPINNER以获取已检索的XML数据

ran*_*ize 6 xml android listview filtering spinner

我想从URL源(XML数据)获取代码我该怎么做?我能够以列表视图的形式检索数据源.但是,我无法过滤它.

Example:
spinner : "Today","Tomorrow"
Upon select "Today"
it will show out the events for today.
Upon select "Tomorrow"
it will show out the events for tomorrow.
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?

我已经尝试过编码,但是,我遇到了一些错误.

我想从这里获取XML数据:

<start_time>2013-09-25 09:00:00 </start_time>
Run Code Online (Sandbox Code Playgroud)

![XML的屏幕截图] [1]

这是我的Java代码:

public class AndroidXMLParsingActivity extends ListActivity implements OnItemSelectedListener {

    String[] browseby;
    Date d = new Date();

    String[] dates = { "Today", "Tomorrow", "Next Week",

    };

    ArrayList<String> browse = new ArrayList<String>();
    ArrayList<String> mPostingData = new ArrayList<String>();
    Spinner s1;
    ListView listview;
    CustomAdapter cus;

    // All static variables
    static final String URL = "http://api.eventful.com/rest/events/search?app_key=42t54cX7RbrDFczc&location=singapore";
    // XML node keys
    static final String KEY_EVENT = "event"; // parent node
    static final String KEY_TITLE = "title";
    static final String KEY_START_TIME = "start_time";


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();

        XMLParser parser = new XMLParser();
        String xml = parser.getXmlFromUrl(URL); // getting XML
        Document doc = parser.getDomElement(xml); // getting DOM element

        NodeList nl = doc.getElementsByTagName(KEY_EVENT);
        // looping through all item nodes <item>
        for (int i = 0; i < nl.getLength(); i++) {
            // creating new HashMap
            HashMap<String, String> map = new HashMap<String, String>();
            Element e = (Element) nl.item(i);
            // adding each child node to HashMap key => value
            map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));


            map.put(KEY_START_TIME, parser.getValue(e, KEY_START_TIME));

            // adding HashList to ArrayList
            menuItems.add(map);
        }

        // Adding menuItems to ListView
        ListAdapter adapter = new SimpleAdapter(this, menuItems,
                R.layout.list_item, new String[] { KEY_TITLE,KEY_START_TIME }, new int[] {
                        R.id.title,
                        R.id.startTime });

        setListAdapter(adapter);

        // selecting single ListView item
        ListView lv = getListView();

        lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // getting values from selected ListItem
                String title = ((TextView) view.findViewById(R.id.title))
                        .getText().toString();


                // Starting new intent
                Intent in = new Intent(getApplicationContext(),
                        SingleMenuItemActivity.class);
                in.putExtra(KEY_TITLE, title);


                startActivity(in);

            }
        });
        listview = (ListView) findViewById(R.id.listView1);
        s1 = (Spinner) findViewById(R.id.spinner1);
        for (int i = 0; i < browseby.length; i++) {
            browse.add(browseby[i]);
        }

        // aa = new
        // ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,Category);
        s1.setOnItemSelectedListener(this);
        mPostingData = browse;
        for (int i = 0; i < mPostingData.size(); i++) {
            if (mPostingData.size() > 0)
                Log.i("Datas", mPostingData.get(i));
        }
        cus = new CustomAdapter(this, 0);
        setListAdapter(cus);

        ArrayAdapter<String> aa = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, dates);

        aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        s1.setAdapter(aa);
        }

    public void onItemSelected(AdapterView<?> parent, View v, int position,
            long id) {
        // listview.setFilterText(Category[position]);
        String Text = s1.getSelectedItem().toString();
        cus.getFilter().filter(Text);
        cus.notifyDataSetChanged();
        }

        public void onNothingSelected(AdapterView<?> parent) {
        // listview.setFilterText("");
        }

        public void onListItemClick(ListView parent, View v, int position, long id) {
        Toast.makeText(this, "You have selected " + mPostingData.get(position),
                Toast.LENGTH_SHORT).show();
        }

        class CustomAdapter extends ArrayAdapter<String> {

        public void setData(ArrayList<String> mPpst) {
            mPostingData = mPpst;// contains class items data.
        }

        @Override
        public Filter getFilter() {
            return new Filter() {
                @Override
                protected void publishResults(CharSequence constraint,
                        FilterResults start_time) {
                    if (start_time != null && start_time.count >= 0) {
                        setData((ArrayList<String>) start_time.values);
                    } else {
                        setData(browse);// set original values
                    }

                    notifyDataSetInvalidated();
                }

                @Override
                protected FilterResults performFiltering(CharSequence constraint) {
                    FilterResults result = new FilterResults();
                    if(constraint=="Today")  {

                        constraint = constraint.toString();
                        CharSequence s  = DateFormat.format("yyyy-MM-dd ", d.getTime());
                        ArrayList<String> foundItems = new ArrayList<String>();
                        if (browse != null) {
                            for (int i = 0; i < browse.size(); i++) {

                                if (browse.get(i).contains(s)){
                                    System.out.println("My datas" + browse.get(i));
                                    foundItems.add(browse.get(i));

                                } else {



                                }
                            }
                        }
                        result.count = foundItems.size();// search results found
                                                            // return count
                        result.values = foundItems;// return values
                    } else {
                        result.count = -1;// no search results found
                    }

                    return result;
                }
            };
        }

        LayoutInflater mInflater;

        public CustomAdapter(Context context, int textViewResourceId) {
            super(context, textViewResourceId);
            // TODO Auto-generated constructor stub
            mInflater = (LayoutInflater) context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return mPostingData.size();
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            ViewHolder vh;
            if (convertView == null) {
                vh = new ViewHolder();
                convertView = mInflater.inflate(R.layout.row, null);
                vh.t1 = (TextView) convertView.findViewById(R.id.textView1);

                convertView.setTag(vh);
            } else {
                // Get the ViewHolder back to get fast access to the TextView
                // and the ImageView.
                vh = (ViewHolder) convertView.getTag();
            }
            if (mPostingData.size() > 0)
                vh.t1.setText(mPostingData.get(position));
            return convertView;
        }

        }

        static class ViewHolder {
        TextView t1;
        }
        }
Run Code Online (Sandbox Code Playgroud)

Mic*_*rla 0

我宁愿创建一个数据库并将所有数据放入其中。通过正确使用SQL、PHP和JSON解析,您将能够得到正确的数据。我建议您使用数据库,因为可以通过 SQL 以更好的方式操作数据。

例如,通过 SQL 查询语句即可轻松获取当前日期的事件并对它们进行排序。以下教程应该可以帮助您入门:

如何连接Android与PHP/mySQL