2011-08-02 2 views
1

J'ai un problème avec listview ... J'essaie d'ajouter OnClickListener mais dans ne fonctionne toujours pas. Je veux afficher une autre activité après le clic. Quelqu'un peut-il m'aider? Je sais qu'il ya beaucoup d'exemples, mais il est ne fonctionne pas pour mon Appl ou je ne sais pas comment l'utiliser dans mon exemple ...ListView avec customView et onClickItemListener

C'est ma classe LocationAdapter:

public class LocationAdapter extends ArrayAdapter<LocationModel> { 

int resource; 
String response; 
Context context; 
private LayoutInflater mInflater; 

public LocationAdapter(Context context, int resource, List<LocationModel> objects) { 
    super(context, resource, objects); 
    this.resource = resource; 
    mInflater = LayoutInflater.from(context); 
} 

static class ViewHolder { 
    TextView titleGameName; 
    TextView distanceGame; 
     } 


public View getView(int position, View convertView, ViewGroup parent) 
{ 
    ViewHolder holder; 
    //Get the current location object 
    LocationModel lm = (LocationModel) getItem(position); 

    //Inflate the view 
    if(convertView==null) 
    { 
     convertView = mInflater.inflate(R.layout.item, null); 
     holder = new ViewHolder(); 
     holder.titleGameName = (TextView) convertView 
       .findViewById(R.id.it_location_title); 
     holder.distanceGame = (TextView) convertView 
       .findViewById(R.id.it_location_distance); 

     convertView.setTag(holder); 


    } else { 

     holder = (ViewHolder) convertView.getTag(); 

    } 

    holder.titleGameName.setText(lm.getGameName()); 
    holder.distanceGame.setText(lm.getGameDistance()+" km"); 

    return convertView; 
} 

}

C'est ma classe mainListView:

public class SelectGameActivity extends Activity { 
LocationManager lm; 
GeoPoint userLocation; 

ArrayList<LocationModel> locationArray = null; 
LocationAdapter locationAdapter; 
LocationList list; 

ListView lv; 
TextView loadingText; 
TextView sprawdz; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.selectgame); 

    lv = (ListView) findViewById(R.id.list_nearme); 

    locationArray = new ArrayList<LocationModel>(); 
    locationAdapter = new LocationAdapter(SelectGameActivity.this, R.layout.item, locationArray); 


    lv.setTextFilterEnabled(true); 
    lv.setAdapter(locationAdapter); 
    lv.setItemsCanFocus(true); 





    String serverName = getResources().getString(R.string.serverAdress); 
    ApplicationController AC = (ApplicationController)getApplicationContext(); 
    String idPlayer = AC.getIdPlayer(); 
    int latitude = AC.getCurrentPositionLat(); 
    int longitude = AC.getCurrentPositionLon(); 
    int maxDistance = 99999999; 


    try { 
     new LocationSync().execute("myserverName"); 
    } catch(Exception e) {} 







} 


//this is connection with json 
private class LocationSync extends AsyncTask<String, Integer, LocationList> { 

    protected LocationList doInBackground(String... urls) { 
     LocationList list = null; 
     int count = urls.length; 

     for (int i = 0; i < count; i++) { 
      try {   
       // ntar diganti service 
       RestClient client = new RestClient(urls[i]); 

       try { 
        client.Execute(RequestMethod.GET); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 

       String json = client.getResponse(); 

       list = new Gson().fromJson(json, LocationList.class); 

       // 
      } catch(Exception e) {} 
     } 
     return list; 
    } 

    protected void onProgressUpdate(Integer... progress) { 

    } 

    protected void onPostExecute(LocationList loclist) { 

     for(LocationModel lm : loclist.getLocations()) 
     { 
      locationArray.add(lm); 
     } 
     locationAdapter.notifyDataSetChanged(); 
    } 

} 

EDIT :: Je deuxième problème ... je veux obtenir id de l'article (les articles sont télécharger ing d'url JSON) Voici ma liste:

enter image description here

Je veux par exemple: ID: 159 pour le premier article et l'envoyer à nextActivity.

J'ai aussi le controllerClass.java où je suis et lire les selectedIdGame:

public String getIdGameSelected() { 

    return idGame; 
} 

public void setIdGameSelected(String idGame) { 

    this.idGame = idGame; 
} 

Est-ce une bonne idée? Merci pour l'aide.

Ok, c'est fait. j'ai utilisé:

public void onItemClick(AdapterView<?> a, View 
           v, int position, long id) { 


      String idGame = (String) ((TextView) v.findViewById(R.id.idGameSelected)).getText(); 

Merci, Michal.

Répondre

2

Vous pouvez définir un onItemClick sur votre instance de l'adaptateur (c.-à mainListView.java, juste après lv.setAdapter):

lv.setOnItemClickListener(new OnItemClickListener() { 
       public void onItemClick(AdapterView<?> a, View 
             v, int position, long id) { 
        Intent i = new Intent(v.getContext(), NextActivity.class); 
        startActivity(i); 
       } 
      }); 
+0

Merci beaucoup! Ça fonctionne bien! – Michal

1
lv.setOnItemClickListener(new OnItemClickListener(){ 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
      Intent i = new Intent(view.getContext(), NextActivity.class); 
      startActivity(i); 

     } 
    }); 

Je ne sais pas pourquoi cela ne fonctionnerait pas, mettez-le après le bloc try {} catch {}.

+1

arf, tu me bats sur la ligne ... Dommage un collègue sur le mien vient chit chat en ce moment même ...;) – Renaud

+0

J'aime bien que nous l'appelions tous les deux NextActivity.class. : D – Rob

Questions connexes