2013-08-16 62 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會拋出異常。

相關問題