我试图输入演员数据但是当我在onItemClick(...)下写TextView clickData=(TextView) view
时,logcat显示msg:
java.lang.ClassCastException:android.widget.RelativeLayout无法强制转换为android.widget.TextView
我不知道为什么。
这属于主要活动:
public class ListViewForAllContact extends AppCompatActivity {
ListView myListView;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.listviewforallcontact);
ContactDatabase onbOfContactDatabase=new ContactDatabase(getBaseContext());
Cursor mCursor= onbOfContactDatabase.phoneName();
String[] fromFileName=new String[]{ContactDatabase.NAME};
int[] toViewId=new int[]{R.id.textView5};
SimpleCursorAdapter simpleCursorAdapter;
simpleCursorAdapter=new SimpleCursorAdapter(this,R.layout.forreading,mCursor,fromFileName,toViewId,0);
myListView=(ListView)findViewById(R.id.listView);
myListView.setAdapter(simpleCursorAdapter);
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView clickData=(TextView) view;//becouse of this line error will come.
Toast.makeText(getBaseContext(), clickData.getText(), Toast.LENGTH_LONG).show();
}
});
}
}
这是带有ListView的xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/listView"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
这是第二个带有TextView的XML文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Large Text"
android:id="@+id/textView5"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"/>
</RelativeLayout>
答案 0 :(得分:1)
您希望访问其在第二个xml上显示的RelativeLayout的视图。如果要访问TextView,则必须在RelativeLayout上找到它。
而不是这个
TextView clickData =(TextView)视图;
试试这个
TextView clickData =(TextView)view.findViewById(R.id.textView5);
我认为这可以解决您的问题
...更新
我的建议是使用适配器
公共类YourAdapter扩展了BaseAdapter {
private ArrayList<Things> things;
private Context context;
private TextView yearTxtView;
private TextView weekTxtView;
private TextView extraTxtView;
public YourAdapter(Context context, ArrayList<Things> things) {
this.things = things;
this.context = context;
}
@Override
public int getCount() {
return this.things.size();
}
@Override
public Object getItem(int position) {
return this.things.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = LayoutInflater.from(this.context).inflate(R.layout.ITEM_LAYOUT, parent, false);
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//do your code here
}
});
return convertView;
}
}
并且根据您的代码,只需执行此操作
私人YourAdapter yourAdapter;
this.yourAdapter = new YourAdapter(getActivity(),YourArray);
myListView.setAdapter(this.yourAdapter);
答案 1 :(得分:0)
Android 编译器似乎变得非常具体。我遇到了同样的问题,很遗憾,因为这是每个示例程序和Android developer forum or guide上的那种代码。解决方案是对待编译器,向它提供它所要求的内容,在本例中为textview (android.widget.TextView)。
移除 TextView 周围的布局框架(LinearLayout、RelativeLayout 等)并相信在 ListView 父小部件内膨胀时,它将“在代码世界中找到自己的方式”。所以,放开它。
因此您可以根据需要定义 TextView 的属性,声明 android 架构 (xmlns:android="http://schemas.android.com/ apk/res/android") 在 TextView 本身中。之后,编译就不会混淆了,一切都应该编译了。