android里getView,inflate,listview问题
16lz
2022-06-19
今天在写一个listview的时候,遇到一个问题,如下
packagecom.brookji.funlearn;importjava.util.ArrayList;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.os.Bundle;
importandroid.view.LayoutInflater;
importandroid.view.Menu;
importandroid.view.MenuItem;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.BaseAdapter;
importandroid.widget.ListView;
importandroid.widget.TextView;
public classListViewActivity extendsActivity{
privateListViewlistView;
privateMyAdapteradapter;
@Override
protected voidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view);
listView=(ListView)findViewById(R.id.listviewlearn);
ArrayList<String>array= newArrayList<>();
array.add("jilichuan");
array.add("xumeifang");
adapter= newMyAdapter( this,array);
listView.setAdapter(adapter);
/* TextViewview=newTextView(this);
listView.addView(view);
view.setText("child"); */
}
public classMyAdapter extendsBaseAdapter{
privateArrayList<String>items;
privateContextcontext;
publicMyAdapter(){
items= newArrayList<>();
}
publicMyAdapter(Contextcontext,ArrayList<String>items){
this.context=context;
this.items=items;
}
@Override
public intgetCount(){
// TODOAuto-generatedmethodstub
returnitems.size();
}
@Override
publicObjectgetItem( intposition){
// TODOAuto-generatedmethodstub
returnitems.get(position);
}
@Override
public longgetItemId( intposition){
// TODOAuto-generatedmethodstub
returnposition;
}
@Override
publicViewgetView( intposition,ViewconvertView,ViewGroupparent){
// TODOAuto-generatedmethodstub
convertView=((LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.listviewlearn_item_title, null);
TextViewtextView=(TextView)convertView.findViewById(R.id.listviewlearn_title);
textView.setText((String)getItem(position));
returnconvertView;
}
}
}
这段代码是可以运行的,
但是将倒数的代码
convertView=((LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.listviewlearn_item_title,null);
改为
convertView=((LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.listviewlearn_item_title,parent);
就会出错,那么就会问:子节点不就是放在listview低下吗?不就是子节点吗?怎么不能这样写呢?
醉深层次的原因我还不知道,但是浅层次的原因是:
在viewgroup中,addview方法不能运用于adapterview,而listview就是一个adapterview,而inflate实现的效果适合add一样的,因此不可以这样,只能设为null。
oncreate方法的最后三行注释掉了,不注释掉,同样会出错!
更多相关文章
- android source code下载源代码时出错
- Android(安卓)Studio报错 (androidx.recyclerview.widget.Recycl
- Ubuntu 12.04 Desktop 版本编译 Android(安卓)4.0.4 出错解决
- android Pull解析xml 使用小结
- Android中获取SQL Server中的数据
- Android创建XMl文件
- AndroidManifest 合并出错 tools:replace="android:allowBackup"
- android DecorView的使用
- Android7关闭selinux(设置为Permissive模式)