2011-05-19 49 views
0

我有一個問題,我想要使用OnItemClickListener接口的onItemClick方法來獲取listView項目的文本。問題是simpleCursorAdaptor的佈局有3個TextViews,我如何才能獲得那些TextView中的一個的文本?我得到一個ClassCastException。如何抽取佈局中所有3個textView的內容。這裏是我的代碼在我的應用程序中的ClassCastException

package com.messageHider; 

import android.app.Activity; 
import android.content.ContentResolver; 
import android.database.Cursor; 
import android.net.Uri; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 
import android.widget.TextView; 
import android.widget.Toast; 

public class sms extends Activity implements OnItemClickListener 
{ 
ListView listViewSMS; 
Uri smsUri=Uri.parse("content://sms/inbox"); 
Cursor cursor; 
SimpleCursorAdapter adapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.sms); 
    listViewSMS=(ListView)findViewById(R.id.listViewSMS); 
    listViewSMS.setOnItemClickListener(this); 
} 
@Override 
protected void onStart() { 
    super.onStart(); 
    getsms(); 
} 
private void getsms() 
{ 
    cursor=getContentResolver().query(smsUri,null, null, null, null); 
    String[]from={"person","body","date"}; 
    int[]to={R.id.textViewPerson,R.id.textViewBody,R.id.textViewDate}; 
    adapter=new SimpleCursorAdapter(this,R.layout.smslist, cursor, from, to); 
    listViewSMS.setAdapter(adapter); 
} 
@Override 
public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
    Toast.makeText(getApplicationContext(),((TextView) v).getText(), Toast.LENGTH_LONG).show(); 
    } 
} 

這裏是適配器的佈局:

<?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="match_parent" android:orientation="vertical"> 
    <LinearLayout android:layout_height="wrap_content" android:id="@+id/linearLayout1" android:layout_width="match_parent"> 
     <TextView android:text="TextView" android:layout_height="wrap_content" android:padding="5dp" android:layout_width="wrap_content" android:id="@+id/textViewPerson"></TextView> 
     <TextView android:text="TextView" android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/textViewDate" android:gravity="right" android:paddingRight="5dp"></TextView> 
    </LinearLayout> 
    <TextView android:text="TextView" android:id="@+id/textViewBody" android:layout_height="wrap_content" android:height="60dp" android:padding="5dp" android:layout_width="fill_parent"></TextView> 
</LinearLayout> 

我會欣賞的幫助。

+0

請張貼在你的代碼異常,並突出顯示(帶有註釋),在那裏它被觸發。 – Mat 2011-05-19 06:46:48

回答

1

您會收到整個LinearLayout作爲參數v。 您應該嘗試v.findViewById(),然後使用此文本視圖。

0

喜在你的活動代碼:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.sms); 
    listViewSMS=(ListView)findViewById(R.id.listViewSMS); 
    listViewSMS.setOnItemClickListener(this); 
} 

你已經初始化列表視圖但在XML文件中沒有這樣的列表視圖。你確定你在setContentView方法中使用正確的佈局XML文件嗎?

另一種觀察可以是:你在這裏發佈了正確的佈局XML文件嗎?

0

試試這個

HashMap<String, String> select = (HashMap<String, String>) parent.getItemAtPosition(position); 
     String person = select.get("person"); 
     String body = select.get("body"); 
     String date = select.get("date"); 

希望這有助於

相關問題