2011-05-19 112 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"); 

希望这有助于

相关问题