Clique no item da lista nao é identificado

3 respostas
sarkozy

criei uma ListActivity , porem quando clico em um item da lista o evento onListItemClick não é chamado nunca...

o q pode ser?

import java.util.ArrayList;


import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;
import android.widget.Toast;

public class ListSelectContactsActivity extends ListActivity 
{
	
	  private ArrayList<GridSelectContactsDataController> list;

	    @Override
	    public void onCreate(Bundle savedInstanceState) 
	    {
	        super.onCreate(savedInstanceState);
	        // Setei minha activity com o arquivo layout criado
	        setContentView(R.layout.tela_selecionar_contatos);
	        list = new ArrayList<GridSelectContactsDataController>();
	        SelectContactsListAdapterController selectContactsListAdapterController = new SelectContactsListAdapterController(this, list);
	        // Agora vou popular minha lista
	        this.getListView().setAdapter(selectContactsListAdapterController);	        
	        ArrayList<Contato> androidContacts = selectContactsListAdapterController.getAndroidContacts();	        
	        // criar os dados da minha lista
	        for (Contato contact : androidContacts)
	        {
	            list.add(new GridSelectContactsDataController(false, contact.getNomeContato()));
	        }	        
	        // Habilita o scroll rápido na lista
	        this.getListView().setFastScrollEnabled(true);
	    }

	    @Override
	    protected void onListItemClick(ListView list, View view, int position,
	            long id) {
	        Toast.makeText(ListSelectContactsActivity.this,
	                "contato selecionado : " + this.list.get(position).getContactName(),
	                Toast.LENGTH_SHORT).show();
	    }

}
import java.util.ArrayList;



import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;

public class SelectContactsListAdapterController extends BaseAdapter
{
	private Context context;
	private ArrayList<GridSelectContactsDataController> list;

	public SelectContactsListAdapterController(Context context, ArrayList<GridSelectContactsDataController> list) {
		this.context = context;
		this.list = list;
	}

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

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

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


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

		// Inflando o layout das linhas, ou seja, aqui eu defino que as linhas serão
		// conforme o arquivo de layout "R.layout.row_layout"
		LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		View view = inflater.inflate(R.layout.selecionar_contatos_row, null);

		// Recuperando as views do layout
		TextView name = (TextView) view.findViewById(R.id.txtNameContact);
		CheckBox checkSelect = (CheckBox) view.findViewById(R.id.checkSectContact);

		// Setando os dados no layout inflado 
		// Dados estes que vem da minha lista
		name.setText(list.get(position).getContactName());
		checkSelect.setChecked(list.get(position).isContactSelect());

		return view;
	}

	public ArrayList<Contato> getAndroidContacts() 
	{	   
		ArrayList<Contato> androidContacts = new ArrayList<Contato>();
		ContentResolver cr = context.getContentResolver();
		Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
		if (cur.getCount() > 0)
		{
			while (cur.moveToNext())
			{
				if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
				{
					String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
					String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));	
					/*
					 * Se o contato tiver algum telefone registrado, adiciona-se os telefones dele em uma string
					 *que sera atribuida ao objeto referente ao contato do loop
					 */
					String phones = "";

					Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id}, null);
					while (pCur.moveToNext())
					{
						String phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
						if (phones != "")
							phones += "*"+phoneNo;
						else
							phones += phoneNo;
					}
					pCur.close();

					/*
					 * Adiciona-se os telefones do contato em uma string
					 *que sera atribuida ao objeto referente ao contato do loop
					 */	    		  
					String emails = "";
					Cursor emailCur = cr.query( ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
							null,
							ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
							new String[]{id}, null); 
					while (emailCur.moveToNext()) 
					{     				  
						String email = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
						if (phones != "")
							emails += "*"+email;
						else
							emails += email;
					} 
					emailCur.close();

					// cria o objeto referente ao contato da iteracao
					Contato contact = new Contato ();
					contact.setIdContato(id);
					contact.setPrioridade(PrioridadeEnum.ALTA);
					contact.setNomeContato(name);
					contact.setEmail(emails);
					contact.setNumCelular(phones);
					contact.setEstatus(EstatusEnum.ATIVO);

					//adiciona o contato na lista de contatos
					androidContacts.add(contact);
				}

			}  
		}

		return androidContacts;
	}
}
public class GridSelectContactsDataController 
{
	private boolean contactSelect;
	private String contactName;
	
	
	public GridSelectContactsDataController(boolean contactSelect,String contactName)
	{
		this.contactSelect = contactSelect;
		this.contactName = contactName;
	}


	public boolean isContactSelect() {
		return contactSelect;
	}


	public void setContactSelect(boolean contactSelect) {
		this.contactSelect = contactSelect;
	}


	public String getContactName() {
		return contactName;
	}


	public void setContactName(String contactName) {
		this.contactName = contactName;
	}
	
	
	
	

}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TableLayout android:id="@+id/tableLayout1"
        android:layout_width="match_parent" android:layout_height="wrap_content">
        <TableRow android:id="@+id/tableRow5" android:layout_width="wrap_content"
            android:layout_height="wrap_content">
            <EditText android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:id="@+id/editText1"
                android:hint="Search" android:layout_weight="1">
            </EditText>

            <Button android:text="Search" android:id="@+id/button2"
                android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
        </TableRow>
    </TableLayout>
    <ListView android:id="@android:id/list" android:layout_height="wrap_content"
        android:layout_width="match_parent"></ListView>

</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <TableLayout
        android:id="@+id/tableLayout"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="center_vertical"
        android:padding="10dp"
        android:stretchColumns="0" >

        <TableRow
            android:id="@+id/rowList"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <CheckBox
                android:id="@+id/checkSectContact"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

            <TextView
                android:id="@+id/txtNameContact"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" >
            </TextView>
            
        </TableRow>
        
    </TableLayout>

</LinearLayout>

Alguem sabe o pq o evento de clique na lista nao eh chamado?

3 Respostas

Marky.Vasconcelos

Se a View que voce exibe dentro do ListView tem algum evento de click ele vai consumir antes da List.

sarkozy

mas eu nao coloquei nenhum evento na textview…

felipebonezi

Esqueceu?

ListView l = getListView();
l.setOnItemClickListener(this);
Criado 15 de fevereiro de 2012
Ultima resposta 24 de fev. de 2012
Respostas 3
Participantes 3