2017-06-24 4 views
0

J'ai créé un adaptateur personnalisé en étendant ArrayAdapter. J'ai essayé d'utiliser setOnClickListener à l'intérieur car setItemOnClickListener ne fonctionne pas pour moi. Voici mon get Code adaptateur personnalisé:Erreur getItem() sur OnClickListener à l'intérieur de CustomAdapter

public class ChatRoomAdapter extends ArrayAdapter<ChatRoom> { 
    Context context; 
    ChatRoom chatRoom; 
    public ChatRoomAdapter(Context context, ArrayList<ChatRoom> chatRoomArrayList){ 
     super(context,0,chatRoomArrayList); 
     this.context = context; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     convertView= LayoutInflater.from(context).inflate(R.layout.chat_room_model,parent,false); 
     chatRoom = getItem(position); 
     System.out.println(chatRoom.chatRoomId); 
     final TextView chatroomName = (TextView)convertView.findViewById(R.id.chatroom_name); 
     final TextView chatroomMessage = (TextView)convertView.findViewById(R.id.chatroom_message); 
     chatroomMessage.setText(Splash_Screen.localDatabase.getLatestChatMessage(chatRoom.chatRoomId).message); 
     LinearLayout chatroomLayout = (LinearLayout)convertView.findViewById(R.id.chatroom); 
     chatroomLayout.setOnClickListener(openChat); 
     chatroomName.setText(chatRoom.chatRoomName); 
     return convertView; 
    } 
    private View.OnClickListener openChat = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Bundle bundle = new Bundle(); 
      bundle.putString("chatroom_id",chatRoom.chatRoomId); 
      FragmentTransaction fragmentTransaction = ((FragmentActivity)getContext()).getSupportFragmentManager().beginTransaction(); 
      ChatFragment chatFragment = new ChatFragment(); 
      chatFragment.setArguments(bundle); 
      fragmentTransaction.replace(R.id.view_container,chatFragment); 
      fragmentTransaction.addToBackStack(null); 
      fragmentTransaction.commit(); 
     } 
    }; 

Lorsque j'ai cliqué sur le premier élément, il me renvoie le deuxième objet Item. Quel pourrait être le problème? Merci.

+0

dans '' utiliser onClick' AdapterView # getPositionForView (Voir vue) ' – pskink

+0

@pskink peut vous montrer moi comment le faire? – VincentTheonardo

+0

quels problèmes avez-vous avec l'appel d'une méthode qui prend juste un paramètre? – pskink

Répondre

1

Il semble que la séparation de votre écouteur de clic soit le problème. Essayez de déplacer votre onClick() à l'intérieur de votre getView() afin que vous n'êtes pas obtenir les anciennes valeurs de vos variables membres:

@Override 
public View getView(int position, View convertView, ViewGroup parent){ 
    final ChatRoom chatRoom = getItem(position); 
    chatroomLayout.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v){ 
      // You should have the accurate position here now 
      // so you can perform actions on the correct chatroom 
     } 
    }); 
    // The rest of your code ... 
}