2012-02-12 1 views
0

Почему это не работает? Может ли кто-нибудь сказать мне, что случилось с этим onitemclicklistener? Это не дает мне никаких ошибок, но ничего не делает при нажатии.проблемы с onItemClickListener

public class Test extends ListActivity 
{ 
private CommentsDataSource datasource; 


@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    datasource = new CommentsDataSource(this); 
    datasource.open(); 

    List<Comment> values = datasource.getAllComments(); 

    // Use the SimpleCursorAdapter to show the 
    // elements in a ListView 
    ArrayAdapter<Comment> adapter = new ArrayAdapter<Comment>(this, R.layout.simple_list_item_1, values); 
    setListAdapter(adapter); 



// Will be called via the onClick attribute 
// of the buttons in main.xml 


ListView list = (ListView) findViewById(android.R.id.list); 

list.setClickable(true); 
list.setOnItemClickListener(new AdapterView.OnItemClickListener() 
{ 

public void onItemClick(AdapterView<?> list, View view, int position, long id) 
{ 
    @SuppressWarnings("unchecked") 
    ArrayAdapter<Comment> adapter = (ArrayAdapter<Comment>) getListAdapter(); 
    Comment comment = null; 
    switch (view.getId()) 
    { 
    case R.layout.simple_list_item_1: 
     String s = ((TextView)view.findViewById(android.R.id.text1)).getText().toString(); 
     String keyword = s.substring(s.lastIndexOf(' ')); 



     String uri= "smsto:" + keyword; 
     Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(uri)); 
     startActivity(intent); 

    } 
} 
}); 
} 



public void onClick(View view) 
{ 
    @SuppressWarnings("unchecked") 
    ArrayAdapter<Comment> adapter = (ArrayAdapter<Comment>) getListAdapter(); 
    Comment comment = null; 
    switch (view.getId()) 
    { 

    case R.id.delete: 
     if (getListAdapter().getCount() > 0) 
     { 
      comment = (Comment) getListAdapter().getItem(0); 
      datasource.deleteComment(comment); 
      adapter.remove(comment); 
     } 
     break; 

    case R.id.add: 
     if (getListAdapter().getCount() > 0) 
     { 
      int far = getListAdapter().getCount(); 
      comment = (Comment) getListAdapter().getItem(0); 
      datasource.deleteComment(comment); 
      adapter.remove(comment); 
     } 
     break; 

     /* 
    case R.layout.simple_list_item_1: 
     { 
      List<String> sms = new ArrayList<String>(); 
      Uri uriSMSURI = Uri.parse("content://sms/inbox"); 
      Cursor cur = getContentResolver().query(uriSMSURI, null, null, null, null); 
      String address = cur.getString(cur.getColumnIndex("address")); 
      String body = cur.getString(cur.getColumnIndexOrThrow("body")); 
      sms.add("Number: " + address + " .Message: " + body); 
     } 
     break; 
     */ 
    } 
    adapter.notifyDataSetChanged(); 

} 


@Override 
protected void onResume() 
{ 
    datasource.open(); 
    super.onResume(); 
} 

@Override 
protected void onPause() 
{ 
    datasource.close(); 
    super.onPause(); 
} 

} 

Вот файл main.xml, где хранится lstview:

<?xml version="1.0" encoding="utf-8"?> 
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" 
android:background="#FFFFFF"> 

<ListView 
    android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="406dp" 
    android:layout_y="76dp" 
    android:background="#FFFFFF" 
    android:clickable="true" 
    android:divider="#000000" 
    /> 

<Button 
    android:id="@+id/delete" 
    android:layout_width="120dp" 
    android:layout_height="40dp" 
    android:layout_x="21dp" 
    android:layout_y="16dp" 
    android:onClick="onClick" 
    android:text="Delete First" /> 

<Button 
    android:id="@+id/add" 
    android:layout_width="120dp" 
    android:layout_height="40dp" 
    android:layout_x="174dp" 
    android:layout_y="16dp" 
    android:onClick="onClick" 
    android:text="Delete All" /> 

</AbsoluteLayout> 

И файл XML, где хранится редактирования текста:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/text1" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:gravity="center_vertical" 
android:layout_margin="10dp" 
android:paddingLeft="10dip" 
android:paddingRight="10dip" 
android:textColor="#000000" 
android:clickable="true" 
android:background="#FFFFFF" 
android:minHeight="?android:attr/listPreferredItemHeight" 
/> 

ответ

1

Ваш редактировать текст является кликабельным и заполняет всю строку. Клики обрабатываются текстом редактирования, поэтому прослушиватель списка элементов никогда не срабатывает. Невозможно определить, должен ли пользователь нажимать на текст редактирования или нажимать на строку.

Добавить кнопку или что-то еще, что пользователь может щелкнуть по каждой строке, которая не является редактированием текста.

0

Откуда вы знаете, что ничего не предпринимали при нажатии? Потому что Intent не срабатывает? Это отличный чайник. Убедитесь, что ваш слушатель вызывался на всех либо установив точку останова и отладки или положить следующее:

public void onItemClick(AdapterView<?> list, View view, int position, long id) 
{ 
    Log.v("onItemClick()", "inside listener, id = ["+view.getId()+"]"); 
    ... 

Лично я думаю, что вы получаете там просто отлично. Я подозреваю, что идентификатор вида - это не то, что вы думаете, и этот журнал покажет его.

switch (view.getId()) 
{ 
    case R.layout.simple_list_item_1: 

мнение ID не будет R.layout.simple_list_item_1, это, вероятно, будет идентификатор корневого элемента этого макета, если ничего, что, если вы являются с использованием этого макета, будет android:id/text1. Я не совсем понимаю, почему вы тестируете идентификатор представления, но тестирование на правильное поможет.

+0

Я уже сделал это, чтобы проверить. Это действительно слушатель, который не работает. Я сделал все, что в моих силах, чтобы проверить это, и он ничего не возвращает. Я думаю, что это имеет какое-то отношение к android.R.id.list. по какой-то причине я не могу нажать на данный список андроида, но я также не могу создать свой собственный, поскольку он содержит инструменты, необходимые для адаптера. – Christian