2013-07-15 248 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

通知所附的观察员底层数据已经改变,任何视图反映了数据集应刷新本身。