2013-11-03 4 views
0

잘하면 누군가가 올바른 방향으로 나를 가리킬 수 있습니다, 나는 listview 이미지, ID, 텍스트 3 항목을 표시하는 사용자 지정 어댑터를 만들고 있어요.안드로이드 맞춤 어댑터 전달 객체의 ArrayList

그래서 잘 작동하는 JSON 객체를 반환하는 webservice에서 데이터를 가져옵니다. 내 문제는 어디에 목록이 어떤 데이터도 가지고 있지 않기 때문에, Asynctask 이후 어디서 잘못 될지 모르겠다. 이미 하나의 필드를 회 전자에 전달할 때 이것을 구현했지만, 그것을 알아 내지 못한다. 나는 사용자 정의 어댑터가 수동으로 새로운 CallOut 객체를 할당하고 Arraylist에 추가 할 때처럼 도움이된다고 알고있다.

public class ListCallOuts extends Activity { 



ArrayList<CallOut> callOutResults=new ArrayList<CallOut>(); //=GetCallOuts(); 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.listview); 
    GetCallOuts(); 

    //ArrayList<CallOut> searchResults = GetSearchResults(); 





    final ListView lv1 = (ListView) findViewById(R.id.listView1); 
    lv1.setAdapter(new CallOutAdapter(this,callOutResults)); 
    //lv1.setAdapter(new CallOutAdapter(this, searchResults)); 

    lv1.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
      Object o = lv1.getItemAtPosition(position); 
      CallOut fullObject = (CallOut)o; 
      Toast.makeText(ListCallOuts.this, "You have chosen: " + " " + 
      fullObject.getName(), Toast.LENGTH_LONG).show(); 
     } 
    }); 
} 

private void GetCallOuts() { 

    new DownloadCallouts().execute(new String[] 
{"http://192.168.0.16:8080/return_callouts.json"}); 



} 


private class DownloadCallouts extends AsyncTask<String,Void,JSONArray> { 
    @Override 
    protected JSONArray doInBackground(String... urls) { 

     JSONArray array = null; 
     for (String url : urls) { 
      DefaultHttpClient client = new DefaultHttpClient(); 
      HttpGet httpGet = new HttpGet(url); 
      try { 
       HttpResponse execute = client.execute(httpGet); 
       HttpEntity entity = execute.getEntity(); 
       String data = EntityUtils.toString(entity); 
       array = new JSONArray(data); 


      } catch (JSONException e) { 
       e.printStackTrace(); 
      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return array; 
    } 

    @Override 
    protected void onPostExecute(JSONArray jsonArray) { 
     for(int i=0;i<jsonArray.length();i++){ 

      try { 
       JSONObject row = jsonArray.getJSONObject(i); 
       CallOut callOut = new  
    CallOut(row.getString("id"),row.getString("customer_name")) ; 
       callOutResults.add(callOut); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 


     } 
    } 
} 
} 

답변

0

변경이 :이

final ListView lv1 = (ListView) findViewById(R.id.listView1); 
lv1.setAdapter(new CallOutAdapter(this,callOutResults)); 

:

final ListView lv1 = (ListView) findViewById(R.id.listView1); 
callOutAdapter = new CallOutAdapter(this,callOutResults); 
lv1.setAdapter(callOutAdapter); 

참고 : onPostExecute 방법에 그것을 도달하는 클래스의 속성으로이를 정의해야합니다.

CallOutAdapter callOutAdapter; 

그리고 onPostExecute에서 당신의 ArrayList를 업데이트 한 후이 줄을 추가 : aegen

callOutAdapter.notifyDataSetChanged(); 
+0

덕분에, 내가 CallOutAdapter 정의 실현한다하더라도 일을했다, 많이, 무엇 R.id 해입니다 – Paulmc

+0

평가 .LiCallOutAdapter? –

관련 문제