2014-10-13 5 views
0

У меня проблема, я последовал за некоторым учебным пособием, и мне наконец удалось создать динамический ListBox, но у меня есть проблема, я не знаю, как установить OnClick на элементы, созданные динамически , вот мой сниппет:OnClick на динамически созданный список

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    listView = (ListView) findViewById(R.id.list); 
    adapter = new CustomListAdapter(this, serverList); 
    listView.setAdapter(adapter); 

    pDialog = new ProgressDialog(this); 
    // Showing progress dialog before making http request 
    pDialog.setMessage("Loading..."); 
    pDialog.show(); 



    // Creating volley request obj 
    JsonArrayRequest serverReq = new JsonArrayRequest(url, 
      new Response.Listener<JSONArray>() { 
       @Override 
       public void onResponse(JSONArray response) { 
        Log.d(TAG, response.toString()); 
        hidePDialog(); 

        // Parsing json 
        for (int i = 0; i < response.length(); i++) { 
         try { 

          JSONObject obj = response.getJSONObject(i); 
          server elemento = new server(); 
          elemento.setTitle(obj.getString("title")); 
          elemento.setThumbnailUrl(obj.getString("image")); 
          elemento.setStatus(obj.getString("status")); 
          elemento.setIp(obj.getString("ip")); 

          // adding movie to movies array 
          serverList.add(elemento); 

         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 

        // notifying list adapter about data changes 
        // so that it renders the list view with updated data 
        adapter.notifyDataSetChanged(); 
       } 
      }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        VolleyLog.d(TAG, "Error: " + error.getMessage()); 
        hidePDialog(); 

       } 
      }); 

    // Adding request to request queue 
    AppController.getInstance().addToRequestQueue(serverReq); 
} 

и это мой список адаптер:

public class CustomListAdapter extends BaseAdapter { 
    private Activity activity; 
    private LayoutInflater inflater; 
    private List<server> serverItems; 
    ImageLoader imageLoader = AppController.getInstance().getImageLoader(); 

    public CustomListAdapter(Activity activity, List<server> serverItems) { 
     this.activity = activity; 
     this.serverItems = serverItems; 
    } 

    @Override 
    public int getCount() { 
     return serverItems.size(); 
    } 

    @Override 
    public Object getItem(int location) { 
     return serverItems.get(location); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     if (inflater == null) 
      inflater = (LayoutInflater) activity 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) 
      convertView = inflater.inflate(R.layout.list_row, null); 

     if (imageLoader == null) 
      imageLoader = AppController.getInstance().getImageLoader(); 
     NetworkImageView thumbNail = (NetworkImageView) convertView 
       .findViewById(R.id.thumbnail); 
     TextView title = (TextView) convertView.findViewById(R.id.title); 

     TextView ip = (TextView) convertView.findViewById(R.id.ip); 
     TextView status = (TextView) convertView.findViewById(R.id.status); 

     // getting data for the row 
     server m = serverItems.get(position); 

     // thumbnail image 
     thumbNail.setImageUrl(m.getThumbnailUrl(), imageLoader); 

     // title 
     title.setText(m.getTitle()); 

     // ip 
     ip.setText("Ip: " + String.valueOf(m.getIp())); 



     // status 
     status.setText(String.valueOf(m.getStatus())); 

     return convertView; 
    } 

} 

Я не знаю, где и как добавить событие OnClick каждого пункта из списка, потому что это должно быть сделано с динамической информацией, взятой из данных, полученных адаптером json, может кто-нибудь мне помочь? Спасибо, Маттео.

ответ

0

Если я прав, вам не нужно добавлять setOnClickListener к каждому предмету.

Использование listview.setOnItemClickListener он будет обрабатывать нажмите для каждого & каждый элемент

Добавить это ниже

listview.setAdapter()

Вот пример:

listview.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
public void onItemSelected(AdapterView parentView, View childView, int position, long id) 
{ 
/ /here you have the position so you can do whatever you want with this item 


} 
}); 
+0

Большое вам спасибо, он работает как char m :) –

Смежные вопросы