2013-07-15 243 views
0

我有一個Android應用程序(從教程創建)從JSON創建列表,並根據數據創建黃色或黑色背景。單擊Android後刷新列表視圖

我想要的是當一個人點擊一個項目從列表中,數據被傳輸到服務器(工程) 但是,然後我想刷新我的列表,因爲數據已經改變(不能得到這個工作)可以任何人都幫助我?

這是我的代碼:

public class AndroidJSONParsingActivity extends ListActivity { 
// url to make request 
private static String url = "http://www.somesite.com/kaku/kaku_list.php/"; 

// JSON Node names 
private static final String TAG_ONTVANGERS = "ontvangers"; 
private static final String TAG_ID = "id"; 
private static final String TAG_BESCHRIJVING = "beschrijving"; 
private static final String TAG_KANAAL = "kanaal"; 
private static final String TAG_NUMMER = "nummer"; 
private static final String TAG_STATUS = "status"; 

// contacts JSONArray 
JSONArray ontvangers = null; 

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

    // Hashmap for ListView 
    ArrayList<HashMap<String, String>> ontvanger = new ArrayList<HashMap<String, String>>(); 

    // Creating JSON Parser instance 
    JSONParser jParser = new JSONParser(); 

    // getting JSON string from URL 
    JSONObject json = jParser.getJSONFromUrl(url); 

    try { 
     // Getting Array of Contacts 
     ontvangers = json.getJSONArray(TAG_ONTVANGERS); 

     // looping through All Contacts 
     for(int i = 0; i < ontvangers.length(); i++){ 
      JSONObject c = ontvangers.getJSONObject(i); 

      // Storing each json item in variable 
      String id = c.getString(TAG_ID); 
      String beschrijving = c.getString(TAG_BESCHRIJVING); 
      String kanaal = c.getString(TAG_KANAAL); 
      String nummer = c.getString(TAG_NUMMER); 
      String status = c.getString(TAG_STATUS); 

      // creating new HashMap 
      HashMap<String, String> map = new HashMap<String, String>(); 

      // adding each child node to HashMap key => value 
      map.put(TAG_ID, id); 
      map.put(TAG_BESCHRIJVING, beschrijving); 
      map.put(TAG_KANAAL, kanaal); 
      map.put(TAG_NUMMER, nummer); 
      map.put(TAG_STATUS, status); 


      // adding HashList to ArrayList 
      ontvanger.add(map); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 


    /** 
    * Updating parsed JSON data into ListView 
    * */ 
    ListAdapter adapter = new OntvangerAdapter(this, ontvanger, 
      R.layout.list_item, 
      new String[] { TAG_BESCHRIJVING, TAG_ID, TAG_STATUS }, new int[] { 
      R.id.beschrijving, R.id.Ontvanger_id, R.id.status}); 


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

    // Launching new screen on Selecting Single ListItem 
    lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
          // getting values from selected ListItem 
      String Ontvanger_id = ((TextView) view.findViewById(R.id.Ontvanger_id)).getText().toString(); 
      JSONParser jParser = new JSONParser(); 
      String url1 = "http://www.somesite.com/kaku/action.php?id="+Ontvanger_id+"/" ; 
      // getting JSON string from URL 
      jParser.getJSONFromUrl(url1); 



     } 



    }); 


} 

} 
+1

調用'adapter.notifyDataSetChanged()'刷新列表視圖。 – Raghunandan

+0

這就是我認爲,但我只能選擇:adapter.notify()或「adapter.notify所有()..........方法notifyDataSetChanged()是未定義的類型ListAdapter –

+0

它應該刷新listview。對我來說一直都是這樣的。查看這個視頻http://www.youtube.com/watch?v=wDBM6wVEO70 – Raghunandan

回答

0

使用方法notifyDataSetCHanged();,這將是很好的。

+0

我需要把那個方法放在哪裏,因爲我試圖實現這個,但是我沒有成功。 .........(初學者hhahahaah) –

+0

適配器初始化後:'adapter.notifyDataSetChanged();' – marshallino16

+0

這是我的想法,但我只能選擇: adapter.notify() 或」 適配器.notify all() –

0

要更新列表視圖中的數據/列表中,你必須做出一個調用方法notifyDataSetChanged();

如何以及何時調用? 修改ontvanger之後,請調用上面的函數。 另一方面,我認爲對於較新的API,您不允許在UI線程上發出HTTP請求,您必須在AsyncTask或某個後臺線程上執行此操作。

希望幫助

1

從您的意見

ListAdapter沒有notifyDataSetChanged()

http://developer.android.com/reference/android/widget/ListAdapter.html

您將使用ArrayAdapterBaseAdapter。最好使用自定義ListView和自定義適配器來擴展BaseAdapter的ArrayAdapter。(您可以輕鬆地自定義listview項目)。

http://developer.android.com/reference/android/widget/ArrayAdapter.html

http://developer.android.com/reference/android/widget/BaseAdapter.html#notifyDataSetChanged()

public void notifyDataSetChanged()

在API級別1

通知所附的觀察員底層數據已經改變,任何視圖反映了數據集應刷新本身。