1

Я спрашиваю у своего пользователя почтовый индекс через editText, затем я использую кнопку для извлечения и отображения местоположений магазинов в listView с помощью simpleCursorAdapter.Trouble catching onClick event from listview

Теперь я хочу, чтобы иметь возможность запускать новое действие, выбрав элемент в спискеView и передавая некоторую строковую информацию.

Я не могу заставить onClickListener регистрировать мои клики.

Это потому, что я использую Activity вместо ListActivity?

Я бы предпочел использовать как вход (EditText), так и результаты (ListView) как в одном действии.

activity_pcentry:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/enter_post" /> 

    <EditText 
     android:id="@+id/etPostCode" 
     android:imeOptions="actionSearch" 
     android:inputType="textCapCharacters" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" > 
     <requestFocus /> 
    </EditText> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/search_button" 
     android:onClick="DoPostSearch" /> 

    <ListView 
     android:id="@+id/list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 
    </ListView> 

</LinearLayout> 

stockrow_group:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:clickable="true" 
    android:orientation="vertical" 
    tools:context=".MainActivity" > 

    <TextView 
     android:id="@+id/branch" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="" > 
    </TextView> 

    <TextView 
     android:id="@+id/post" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="" > 
    </TextView> 

    <TextView 
     android:id="@+id/telephone" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="" > 
    </TextView> 


</LinearLayout> 

PostCodeEntryActivity.java:

import android.app.Activity; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 
import android.widget.Toast;  

public class PostCodeEntryActivity extends Activity{ 

     private MyDatabase stockistsDB; 
     public EditText enteredCode; 
     private ListView listView; 

     @Override 
     public void onCreate(Bundle savedInstanceState){ 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_pcentry); 
      stockistsDB = new MyDatabase(this); 
     } 


     public void DoPostSearch(View v) { 

      enteredCode = (EditText)findViewById(R.id.etPostCode); 
      String postalCode = enteredCode.getText().toString(); 
      Cursor results = stockistsDB.getStockistsFromPostCode(postalCode); 

      if (results != null && results.getCount() > 0) { 
       SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
         R.layout.stockrow_group, 
         results, new String[]{"fld_BranchName","fld_PostCode","fld_Tel"}, 
         new int[]{R.id.branch,R.id.post,R.id.telephone}, 
         0); 

       listView = (ListView)findViewById(R.id.list); 
       listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() 
       { 
        @Override 
        public void onItemClick(AdapterView<?> arg0, View arg1, 
          int arg2, long arg3) { 
         Toast.makeText(PostCodeEntryActivity.this, "Clicked", Toast.LENGTH_SHORT).show(); 
        } 
       }); 
       listView.setAdapter(adapter); 


      } else { 
       Toast.makeText(PostCodeEntryActivity.this, "No results found, please check your postcode", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    } 
+1

Вы можете разместить 'stockrow_group.xml' – Raghunandan

+0

Моя ошибка, должно было его с самого начала. – pdbrito

ответ

3

Есть ли у вас какие-либо интерактивные элементы на самих строк? Отправьте XML из R.layout.stockrow_group.

Если у вас есть кнопки на этой компоновке, например, вы, возможно, потребуется добавить следующие строки в этих кнопок:

android:focusable="false" 
android:focusableInTouchMode="false" 

Это позволит убедиться, щелчок на элементе списка не получает заблокирован интерактивными пункта сама строка.

Фактическое решение:

Не делайте строки в списке следует нажать. Это будет «съедать» событие щелчка, зарегистрировав пустой обработчик кликов. Удалить следующую строку из строк в виде списка:

android:clickable="true" 
+0

Не сейчас, но план состоит в том, чтобы добавить кнопку изображения в строки и запустить карты. Я добавил отсутствующий xml выше. – pdbrito

+1

Что произойдет, если вы удалите 'android: clickable =" true "' из LinearLayout в sharerow_group? – doorstuck

+0

Вы знаете, что это действительно мелочи. Огромное спасибо. Выполнение быстрого поиска кажется, что андроид: clickable = "true" регистрирует пустой onClickListener.См. [Здесь] (http://stackoverflow.com/questions/7894815/android-androidclickable-true-means-that-its-not-clickable) для получения дополнительной информации. – pdbrito

1
  1. Реализовать AdapterView.onItemClickListener в вашем activity`
  2. Изменить

    listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener()

    Для

    listView.setOnItemClickListener(this)

  3. Добавить нереализованные методы

+0

Я почти уверен, что пробовал это раньше, но я дам ему еще один шаг. – pdbrito

+0

Нет, он все равно не срабатывает. Ничего не регистрируется в режиме отладки. Может ли мой editText сосредоточиться? – pdbrito

+0

Обновленный ответ. – Aashir

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