Android 创建自定义列表视图

Android 创建自定义列表视图,android,Android,我将制作一个带有安卓设备上安装的应用程序图标和标签的自定义ListView,我制作了一些代码,但我不知道为什么在运行应用程序时,我的ListView是空的,代码如下: public class MainActivity extends Activity { ArrayList<String> AppLabel = new ArrayList<String>(); ArrayList<Drawable> AppIcon = new ArrayList<D

我将制作一个带有安卓设备上安装的应用程序图标和标签的自定义
ListView
,我制作了一些代码,但我不知道为什么在运行应用程序时,我的
ListView
是空的,代码如下:

public class MainActivity extends Activity {

ArrayList<String> AppLabel = new ArrayList<String>();
ArrayList<Drawable> AppIcon = new ArrayList<Drawable>();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final ListView MyListView = (android.widget.ListView) findViewById(R.id.listView1);
    EditText MyEditText = (android.widget.EditText) findViewById(R.id.textView1);
    CustomAdapter Adapter = new CustomAdapter(this, android.R.layout.simple_list_item_multiple_choice,
    MyEditText, AppLabel);
    MyListView.setAdapter(Adapter);




   PackageManager pm = this.getPackageManager();
   List<ApplicationInfo> apps = pm.getInstalledApplications(0);

    for(ApplicationInfo app : apps) {

    String Label = (String)pm.getApplicationLabel(app);
    AppLabel.add(Label);


    Drawable Icon = pm.getApplicationIcon(app);     
    AppIcon.add(Icon);
       }//End for

    Adapter.notifyDataSetChanged();

}//end onCreate


class CustomAdapter extends ArrayAdapter<string>{
public CustomAdapter(Context context, int resource,
            EditText myEditText, ArrayList<String> appLabel) {
        super(context, resource);
        }
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    if (row==null) {
        LayoutInflater Inflater = getLayoutInflater();
        row = Inflater.inflate(R.layout.item_layout, parent, false);    
    }//End if
    EditText MyEditText = (android.widget.EditText) findViewById(R.id.textView1);
    MyEditText.setText(AppLabel.get(position));
    ImageView MyImageView = (ImageView) findViewById(R.id.imageView1);
    MyImageView.setImageDrawable(AppIcon.get(position));
    return (row);
    }//End get view
  }//End CustomAdapter Class

 }//end Main Class
公共类MainActivity扩展活动{
ArrayList AppLabel=新的ArrayList();
ArrayList AppIcon=新的ArrayList();
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
最终ListView MyListView=(android.widget.ListView)findViewById(R.id.listView1);
EditText MyEditText=(android.widget.EditText)findViewById(R.id.textView1);
CustomAdapter=新的CustomAdapter(这是android.R.layout.simple\u list\u item\u多选,
MyEditText,AppLabel);
MyListView.setAdapter(适配器);
PackageManager pm=this.getPackageManager();
列表应用程序=pm.GetInstalledApplication(0);
用于(应用程序信息应用程序:应用程序){
字符串标签=(字符串)pm.getApplicationLabel(应用程序);
添加(标签);
可绘制图标=pm.getApplicationOn(应用程序);
AppIcon.add(图标);
}//结束
Adapter.notifyDataSetChanged();
}//结束一次创建
类CustomAdapter扩展了ArrayAdapter{
公共CustomAdapter(上下文、int资源、,
EditText myEditText,ArrayList appLabel){
超级(上下文、资源);
}
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
if(行==null){
LayoutInflater充气机=getLayoutInflater();
行=充气机。充气(R.layout.item_布局,父项,false);
}//如果结束
EditText MyEditText=(android.widget.EditText)findViewById(R.id.textView1);
MyEditText.setText(AppLabel.get(position));
ImageView MyImageView=(ImageView)findViewById(R.id.imageView1);
MyImageView.setImageDrawable(AppIcon.get(position));
返回(行);
}//结束获取视图
}//结束CustomAdapter类
}//结束主课

将getCount()添加到具有arraylist大小的自定义适配器。

从视图converView获取参考

EditText MyEditText = (android.widget.EditText)converView.findViewById(R.id.textView1);
MyEditText.setText(AppLabel.get(position));
ImageView MyImageView = (ImageView)converView.findViewById(R.id.imageView1);
MyImageView.setImageDrawable(AppIcon.get(position));
到这里来


阵列适配器应注意这一点。这个问题是适配器在任何时候都没有获得阵列。为什么要扩展arrayadapter,使其只使用一半的功能性?更多的详细信息,而不仅仅是发布一个指向教程的链接,这非常有帮助,特别是对于网站的未来用户。