我遇到了问题,我正在尝试使用OnItemClickListener接口的onItemClick方法获取listView项的文本。问题是simpleCursorAdaptor的布局有3个TextViews,如何才能获得其中一个TextView的文本?我得到一个ClassCastException。如何在布局中提取所有3个textView的内容。这是我的代码
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 :(得分:1)
您收到整个LinearLayout作为参数v。 您应该尝试v.findViewById()然后使用此textview。
答案 1 :(得分: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文件?
答案 2 :(得分: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");
希望这有帮助