2013-08-16 63 views
0

我想问, 我正在与微调。 我有一个列表视图和一个微调。 在我的微调我声明“月”,“6月”,“七月”,“八月”,“七月”,“十月”,“nov”,“dec”微调列表视图

在列表视图中,空。 当我点击“8月”时,它会显示列表视图中的8月份(august.java)的数据,我可以知道有没有办法做到这一点?

因为现在,我正在通过课.. 意思是,当我点击8月,它会开辟新的意图。 但我想将它合并到一个类中,所以当我点击“August”时,它将在列表视图中更改,而不会打开新的意图。 有没有办法做到这一点?

这是我的代码我date.java说我越来越

//SpinnerView 
      s1 = (Spinner) findViewById(R.id.spinner1); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, months); 
     s1.setAdapter(adapter); 
     s1.setOnItemSelectedListener(new OnItemSelectedListener() 
     { 
      public void onItemSelected(AdapterView<?> arg0,View arg1, int arg2, long arg3) { 
       int index = s1.getSelectedItemPosition(); 
       //Toast.makeText(getBaseContext(), "You have seleted item :" + months[index] , Toast.LENGTH_SHORT).show(); 
      } 
      public void onNothingSelected(AdapterView<?>arg0) {} 
      }); 


    if (s1.equals("August")) { 

     startActivity(new Intent(date.this,MainActivity.class)); 
    } 
    else{ 
     startActivity(new Intent(date.this,august 
       .class)); 

    } 

数据代码的

String [] months = { 
       "June", 
       "July", 
       "August", 
       "Septemeber", 
       "November", 
       "December", 

一部分。 august.java

public class august extends ListActivity { 

    String URL = "http://api.eventful.com/rest/events/search?app_key=42t54cX7RbrDFczc&location=singapore&page_size=20&date=august"; 

    // XML node keys 
    static final String KEY_EVENT = "event"; // parent node 
    static final String KEY_TITLE = "title"; 
    static final String KEY_URL = "url"; 
    static final String KEY_DESC = "description"; 
    static final String KEY_START_TIME = "start_time"; 
    static final String KEY_STOP_TIME = "stop_time"; 
    static final String KEY_TIME = "combine_time"; 
    static final String KEY_VENUE_NAME = "venue_name"; 
    static final String KEY_COUNTRY_NAME = "country_name"; 
    static final String KEY_VENUE_ADDRESS = "venue_address"; 
    static final String KEY_VENUE = "venue"; 
    static final String KEY_LATITUDE = "latitude"; 
    static final String KEY_LONGITUDE = "longitude"; 

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

     final 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_URL, parser.getValue(e, KEY_URL)); 

      map.put(KEY_DESC, "Description: " + parser.getValue(e, KEY_DESC)); 
      map.put(KEY_START_TIME, parser.getValue(e, KEY_START_TIME)); 
      map.put(KEY_STOP_TIME, parser.getValue(e, KEY_STOP_TIME)); 
      if (parser.getValue(e, KEY_STOP_TIME) != "") { 
       map.put(KEY_TIME, parser.getValue(e, KEY_START_TIME) + "-" 
         + parser.getValue(e, KEY_STOP_TIME)); 
      } else { 
       map.put(KEY_TIME, parser.getValue(e, KEY_START_TIME)); 
      } 
      map.put(KEY_VENUE_NAME, parser.getValue(e, KEY_VENUE_NAME)); 
      map.put(KEY_COUNTRY_NAME, parser.getValue(e, KEY_COUNTRY_NAME)); 
      map.put(KEY_VENUE_ADDRESS, parser.getValue(e, KEY_VENUE_ADDRESS)); 
      map.put(KEY_LATITUDE, parser.getValue(e, KEY_LATITUDE)); 
      map.put(KEY_LONGITUDE, parser.getValue(e, KEY_LONGITUDE)); 
      map.put(KEY_VENUE, parser.getValue(e, KEY_VENUE_NAME) + ", " 
        + parser.getValue(e, KEY_VENUE_ADDRESS)); 

      // 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_DESC, 
         KEY_COUNTRY_NAME, KEY_VENUE, KEY_LATITUDE, 
         KEY_LONGITUDE, KEY_TIME, }, new int[] { R.id.title, 
         R.id.description, R.id.countryName, R.id.venueName, 
         R.id.lat, R.id.lng, 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(); 
       String description = ((TextView) view 
         .findViewById(R.id.description)).getText().toString(); 

       String venue = ((TextView) view.findViewById(R.id.venueName)) 
         .getText().toString(); 
       String lat = ((TextView) view.findViewById(R.id.lat)).getText() 
         .toString(); 

       String lng = ((TextView) view.findViewById(R.id.lng)).getText() 
         .toString(); 

       // Starting new intent 
       Intent in = new Intent(getApplicationContext(), 
         SingleMenuItemActivity.class); 
       in.putExtra(KEY_TITLE, title); 
       in.putExtra(KEY_DESC, description); 
       in.putExtra(KEY_VENUE, venue); 
       in.putExtra(KEY_LATITUDE, lat); 
       in.putExtra(KEY_LONGITUDE, lng); 
       startActivity(in); 

      } 
     }); 


    } 

} 
+0

一次一个。 这意味着当我点击八月,它会显示八月 – randomize

回答

2

使用下面的代码我已经尝试过了做工精细

import java.util.ArrayList; 
    import java.util.List; 

    import android.app.Activity; 
    import android.os.Bundle; 
    import android.view.Menu; 
    import android.view.View; 
    import android.widget.AdapterView; 
    import android.widget.ArrayAdapter; 
    import android.widget.Spinner; 
    import android.widget.Toast; 
    import android.widget.AdapterView.OnItemSelectedListener; 

    public class MainActivity extends Activity implements OnItemSelectedListener { 
     private Spinner sp; 

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

     } 

     public void uI() { 
      sp = (Spinner) findViewById(R.id.mydsp); 
      sp.setOnItemSelectedListener(this); 
     } 

     public void spElements() { 
      List<String> months = new ArrayList<String>(); 
      months.add("June"); 
      months.add("July"); 
      months.add("August"); 
      months.add("September"); 
      months.add("October"); 
      months.add("November"); 
      months.add("December"); 

      // Creating adapter for spinner 
      ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
        android.R.layout.simple_spinner_item, months); 

      // Drop down layout style - list view with radio button 
      dataAdapter 
        .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

      // attaching data adapter to spinner 
      sp.setAdapter(dataAdapter); 
     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 

      getMenuInflater().inflate(R.menu.main, menu); 
      return true; 
     } 

     @Override 
     public void onItemSelected(AdapterView<?> main, View view, int position, 
       long Id) { 

      String item = main.getItemAtPosition(position).toString(); 

    int index = item.getSelectedItemPosition(); 
      Toast.makeText(main.getContext(), "You selected Month is: " + item, 
        Toast.LENGTH_LONG).show(); 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 

     } 

    } 
+0

我想展示我的东西,在列表视图中retreived – randomize

+0

是的,它会显示 –

+0

但我没有声明我想要显示的东西,当点击“八月“ – randomize

0

这里是你

spinner.setOnItemSelectedListener(new OnItemSelectedListener() 
       { 
        @Override 
        public void onItemSelected(AdapterView<?> arg0, View arg1, 
          int arg2, long arg3) 
        { 
         String A = arg0.getSelectedItem().toString(); 
         new abc(Context, A).excute(); 


        } 

        @Override 
        public void onNothingSelected(AdapterView<?> arg0) 
        { 
        } 
       }); 

    private class abc extends AsyncTask<Void, Void, HashMap<String, String>> 
    { 
     ProgressDialog pd; 
     HashMap<String, String> map; 
     String Month; 

     abc(Context context, String a) 
       { 
      pd = new ProgressDialog(context); 
      map = new HashMap<String, String>(); 
Month = a; 
       } 
     protected void onPreExecute() 
     { 
      pd.setTitle("Please Wait..."); 
      pd.setMessage("Saving..."); 
      pd.setCancelable(false); 
      pd.show(); 
     } 
     protected void onPostExecute(HashMap<String, String> result) 
     { 
      // Get value from map and sent it to your adapter class where you can set value to textview in your listview 

      String title = result.get(KEY_TITLE); 

      ListAdapter adapter = new SimpleAdapter(this, menuItems, 
         R.layout.list_item, new String[] { KEY_TITLE, KEY_DESC, 
           KEY_COUNTRY_NAME, KEY_VENUE, KEY_LATITUDE, 
           KEY_LONGITUDE, KEY_TIME, }, new int[] { R.id.title, 
           R.id.description, R.id.countryName, R.id.venueName, 
           R.id.lat, R.id.lng, R.id.startTime }); 

       setListAdapter(adapter); 

       // selecting single ListView item 
       ListView lv = getListView(); 
      if(pd.isShowing()) pd.dismiss(); 
     } 

     @Override 
     protected HashMap<String , String> doInBackground(Void... params) 
     { 
      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 
        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_URL, parser.getValue(e, KEY_URL)); 

        map.put(KEY_DESC, "Description: " + parser.getValue(e, KEY_DESC)); 
        map.put(KEY_START_TIME, parser.getValue(e, KEY_START_TIME)); 
        map.put(KEY_STOP_TIME, parser.getValue(e, KEY_STOP_TIME)); 
        if (parser.getValue(e, KEY_STOP_TIME) != "") { 
         map.put(KEY_TIME, parser.getValue(e, KEY_START_TIME) + "-" 
           + parser.getValue(e, KEY_STOP_TIME)); 
        } else { 
         map.put(KEY_TIME, parser.getValue(e, KEY_START_TIME)); 
        } 
        map.put(KEY_VENUE_NAME, parser.getValue(e, KEY_VENUE_NAME)); 
        map.put(KEY_COUNTRY_NAME, parser.getValue(e, KEY_COUNTRY_NAME)); 
        map.put(KEY_VENUE_ADDRESS, parser.getValue(e, KEY_VENUE_ADDRESS)); 
        map.put(KEY_LATITUDE, parser.getValue(e, KEY_LATITUDE)); 
        map.put(KEY_LONGITUDE, parser.getValue(e, KEY_LONGITUDE)); 
        map.put(KEY_VENUE, parser.getValue(e, KEY_VENUE_NAME) + ", " 
          + parser.getValue(e, KEY_VENUE_ADDRESS)); 

        // adding HashList to ArrayList 

        menuItems.add(map); 
        } 
       return map; 
     } 
    } 

希望它可以帮助你一个例子。

+0

我从http://api.eventful.com/rest/events/search?app_key=42t54cX7RbrDFczc&location=singapore&page_size=20&date=august 所以当我检索数据我点击“八月”它将在列表视图中显示我的数据。 检查我更新的问题 – randomize

+0

在你的情况下,你必须使用异步任务从url获取数据。 – Andrain

+0

@randomize看到我更新的答案。 – Andrain

0

试试这个:

当选择任何一个月,然后尝试为列表视图设置适配器。像这样:

s1.setOnItemSelectedListener(new OnItemSelectedListener() 
     { 
      public void onItemSelected(AdapterView<?> arg0,View arg1, int arg2, long arg3) { 
       int index = s1.getSelectedItemPosition(); 
       if(index>0) 
       { 
          String Month = MonthArray[index]; 

         // get data as per your month here. 
         //set your adapter for listview here according to your month data. 


       } 
      } 
      public void onNothingSelected(AdapterView<?>arg0) {} 
     }); 

如果要加载从服务器的数据,然后要更改适配器的话,我会建议你使用的AsyncTask加载数据。并在Listview的数据加载集合适配器上完成。

希望它有助于!

+0

实际上,我根据start_time从http://api.eventful.com/rest/events/search?app_key=42t54cX7RbrDFczc&location=singapore&page_size=20&date=august 中检索我的数据。 含义> 如果start_time是8月, 它会显示8月份的数据 – randomize

+0

然后最新的问题@randomize?你没有得到八月的价值?? –

+0

我只是想知道如何将它们结合在一起? 含义, date.java是我用来选择“八月”的那个。 august.java是一个有数据 所以 如果我想, 当我点击“八月”,信息将打开,而不必打开另一个通知 – randomize

1

在您的ListView中显示自定义数据实际上并不复杂。有几个步骤涉及。

要显示什么 这很容易。当用户从你的微调器中选择一个项目时,你知道要展示什么;他选择的月份。现在,由于你的月份是实际的班级,我建议你实施一个变量,让你知道选择什么。该变量将被其他类用于实际显示内容。

如何显示 这里是它变得更棘手。您的ListView将显示一个列表。列表中包含的项目需要由您设置。您需要定义您实际希望显示的月份课程中的数据。这里是你的设计落后的地方。你想要显示的项目理想情况下需要是同质的。因此,从一个月起可以更容易地查看月份对象列表,然后查看几个不同项目的列表。我建议您将您的实施从ListView切换到ScrollView内的简单TextView

显示数据 通过上述修改,每次进行选择时,都要对其进行可视化。现在,您可以在这里应用一些小技巧。只需在将返回的对象中实现一个toString()方法,作为String您想要显示给用户的方法。通过这种方式,您可以控制用户所看到的内容,并留下月份对象显示内容的责任,这通常是很好的设计选择。

我希望你会考虑这个新的设计。我相信你在尝试使用ListViewArrayAdapter和ViewHolder模式时会犯错,因为它不是必需的。此外,您还需要预加载所有月份对象,或使用David表示的AsyncTask来检索数据。永远不要用网络操作阻塞你的UI线程。这不仅是一种不好的做法,更新版本的Android会抛出异常。

相关问题