2012-04-12 1 views
1

J'utilise LazyAdapter pour afficher listview et je veux passer la valeur à une autre activité lorsque l'utilisateur clique sur l'élément. Cependant, j'ai du mal à récupérer la valeur. Sil te plait aide moi. MainActivity.javaProblème lors de l'utilisation de LazyAdapter et de getAdapter() pour récupérer la valeur

 list=(ListView)findViewById(R.id.list); 
     //transparent so when scrolling listview won't turn black. 
     list.setCacheColorHint(Color.TRANSPARENT); 
     // Getting adapter by passing JSON data ArrayList 
     adapter=new LazyAdapter(ReviewShowActivity.this, reviewlist); 
     list.setAdapter(adapter); 

     list.setOnItemClickListener(new OnItemClickListener() { 

      @SuppressWarnings("unchecked") 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 

       //Having Trouble with this line, how to retrieve value??? 
       HashMap<String, String> map2 = (HashMap<String, String>) list.getAdapter().getItem(position); 

       Intent in = new Intent(getApplicationContext(), SingleReviewActivity.class); 
       in.putExtra(TAG_NAME, map2.get(TAG_NAME)); 
       in.putExtra(TAG_USERREVIEW, map2.get(TAG_USERREVIEW)); 
       in.putExtra(TAG_DATE, map2.get(TAG_DATE)); 
       in.putExtra(TAG_THUMBURL, map2.get(TAG_THUMBURL)); 
       startActivity(in); 
      } 
     }); 

LazyAdapter.java

public class LazyAdapter extends BaseAdapter { 
private Activity activity; 
private ArrayList<HashMap<String, String>> data; 
private static LayoutInflater inflater=null; 
public ImageLoader imageLoader; 

public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) { 
    activity = a; 
    data=d; 
    inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    imageLoader=new ImageLoader(activity.getApplicationContext()); 
} 

public int getCount() { 
    return data.size(); 
} 

public Object getItem(int position) { 
    return position; 
} 

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

public View getView(int position, View convertView, ViewGroup parent) { 
    View vi=convertView; 
    if(convertView==null) 
     vi = inflater.inflate(R.layout.reviewshow, null); 

    TextView username = (TextView)vi.findViewById(R.id.username); // title 
    TextView userreview = (TextView)vi.findViewById(R.id.userreview); // artist name 
    TextView numlikes = (TextView)vi.findViewById(R.id.numlikes); // duration 
    HashMap<String, String> map = new HashMap<String, String>(); 
    map = data.get(position); 

    //Setting all values in listview 
    username.setText(map.get(ReviewShowActivity.TAG_NAME)); 
    userreview.setText(map.get(ReviewShowActivity.TAG_USERREVIEW)); 
    numlikes.setText(map.get(ReviewShowActivity.TAG_NUMLIKES)); 
    return vi; 
} 

LogCat

04-13 04:14:36.135: E/AndroidRuntime(23909): FATAL EXCEPTION: main 
04-13 04:14:36.135: E/AndroidRuntime(23909): java.lang.ClassCastException:  java.lang.Integer 
04-13 04:14:36.135: E/AndroidRuntime(23909): at org.example.veniew.ReviewShowActivity$ReviewTask$1.onItemClick(ReviewShowActivity.java:221) 
04-13 04:14:36.135: E/AndroidRuntime(23909): at android.widget.AdapterView.performItemClick(AdapterView.java:284) 
04-13 04:14:36.135: E/AndroidRuntime(23909): at android.widget.ListView.performItemClick(ListView.java:3561) 
04-13 04:14:36.135: E/AndroidRuntime(23909): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812) 
04-13 04:14:36.135: E/AndroidRuntime(23909): at android.os.Handler.handleCallback(Handler.java:587) 
04-13 04:14:36.135: E/AndroidRuntime(23909): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-13 04:14:36.135: E/AndroidRuntime(23909): at android.os.Looper.loop(Looper.java:143) 
04-13 04:14:36.135: E/AndroidRuntime(23909): at android.app.ActivityThread.main(ActivityThread.java:4277) 
04-13 04:14:36.135: E/AndroidRuntime(23909): at java.lang.reflect.Method.invokeNative(Native Method) 
04-13 04:14:36.135: E/AndroidRuntime(23909): at java.lang.reflect.Method.invoke(Method.java:507) 
04-13 04:14:36.135: E/AndroidRuntime(23909): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-13 04:14:36.135: E/AndroidRuntime(23909): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-13 04:14:36.135: E/AndroidRuntime(23909): at dalvik.system.NativeStart.main(Native Method) 
+0

ce qui est la méthode getItem du listAdapter – L7ColWinters

+0

i mis à jour le code lazyadapter complet. – Eric

+0

vous voyez votre problème maintenant? lol getItem renvoie un entier pour la position dans l'adaptateur et non l'élément ... – L7ColWinters

Répondre

1

Ceci est la réponse pour ceux qui font face au problème similaire.

public Object getItem(int position) { 
return data.get(position); 
} 
0

peut-être ce lien peut vous aider à obtenir hashmap ArrayList de données, placez ce code sur setonitemclicklistener

link

Questions connexes