2013-05-28 5 views
1

Я пытаюсь получить доступ к слушателю setOnItemClick, и он бросает исключение. Я добавляю туда попытку catch, и там вход в исключение logcat. Есть ли что-то, что я делаю, что вызывает его исключение?ListView setOnItemClickListener Throw Exception

Вот пользовательский адаптер:

import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 


public class StudentAdapter extends ArrayAdapter<Student> { 
    Context context; 
    int layoutResourseId; 
    Student data[] = null; 
    public StudentAdapter(Context context, int layoutResourceId, Student[] data) { 
     super(context, layoutResourceId, data); 
     this.context = context; 
     this.layoutResourseId = layoutResourceId; 
     this.data = data; 
     // TODO Auto-generated constructor stub 
    } 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View row = convertView; 
     StudentHolder holder = null; 
     if(row == null) 
     { 
      LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
      row = inflater.inflate(layoutResourseId, parent, false); 
      holder = new StudentHolder(); 
      //Associate the Items in the holder with a view in the XML file. 
      holder.tvStNumber = (TextView)row.findViewById(R.id.tvStNumber); 
      row.setTag(holder); 
     } else 
     { 
      holder = (StudentHolder) row.getTag(); 
     } 

     //Setting the text for the items 
     Student item =data[position]; 
     holder.tvStNumber.setText(item.GetStudentNumber()); 


     return row; 
    } 
    //Student Holder 
    static class StudentHolder 
    { 
     TextView tvStNumber; 
     TextView tvStDescription; 

    } 
} 

Вот метод Слушатель:

listView1.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position,long id) { 
       try{ 
       String listValue = ((TextView)view).getText().toString(); //This is where the exception is happening. The below text should have been commented out. 
       // String text = (String) listView1.getItemAtPosition(position); // this is where the excexption is happening. 
        Toast.makeText(getApplicationContext(), "You click" + position, Toast.LENGTH_LONG).show(); 
        String d = "Test toast."; 
       }catch(Exception e) 
       { 
        Log.e("Error Message", e.getMessage()); 
       } 
      } 
     }); 

Вот файл XML:

<?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:orientation="vertical" 
    tools:ignore="HardcodedText" 
    > 

    <ScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     > 
     <LinearLayout 
      android:id="@+id/linearylayout1" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      > 
      <ListView 
       android:id="@+id/lvStudent" 
       android:layout_width="match_parent" 
       android:layout_height="144dp" 
       android:descendantFocusability="beforeDescendants" 
       > 
      </ListView> 
     </LinearLayout> 

    </ScrollView> 

</LinearLayout> 

Это как строка выглядит.

?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:focusable="false" 
    > 

    <TextView 
     android:id="@+id/tvStNumber" 
     android:layout_width="100sp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="10sp" 
     android:layout_marginTop="5sp" 
     android:text="EE#" /> 

    <TextView 
     android:id="@+id/tvStDescription" 
     android:layout_width="100sp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="10sp" 
     android:layout_toRightOf="@+id/tvStNumber" 
     android:text="Item Description" /> 
</RelativeLayout> 
+0

Можете ли вы разместить журнал ошибок, чтобы мы могли увидеть трассировку стека? – BlackHatSamurai

+0

plz прикрепите адаптер, используемый в вашем списке, потому что это вызывает проблему. – MDMalik

+0

Спасибо. Я отредактировал главный пост с пользовательским адаптером. –

ответ

0

Скорее всего, вы получите ClassCastException.

Используйте это:

String listValue = (((TextView) ((RelativeLayout) v).getChildAt(0)).getText().toString()); 

вместо:

String listValue = ((TextView)view).getText().toString(); 

View.getChildAt(int i) возвращает View в положении вы передаете в качестве аргумента. Поэтому, если вы используете View.getChildAt(0) (как я и сделал выше), вы должны получить текст TextView с идентификатором tvStNumber.

Но почему вы пытаетесь это сделать таким образом? Вы могли бы просто узнать текст через адаптер.

+1

спасибо, Ахмад, это работает для меня. Я новичок в программировании, поэтому я попытался заставить все работать. Затем я смогу улучшить или улучшить его позже. Иногда примеры, которые я нахожу, которые могут выполнить проделанную работу, проделаны с трудом. –

0

Параметр представления в onItemClick представляет строку, а не текст. Вы можете попробовать

listView1.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position,long id) { 
      try{ 
      String listValue = parent.getItemAtPosition(position).GetStudentNumber(); //This is where the exception is happening. The below text should have been commented out. 
      // String text = (String) listView1.getItemAtPosition(position); // this is where the excexption is happening. 
       Toast.makeText(getApplicationContext(), "You click" + position, Toast.LENGTH_LONG).show(); 
       String d = "Test toast."; 
      }catch(Exception e) 
      { 
       Log.e("Error Message", e.getMessage()); 
      } 
     } 
    });