Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
个性化适配器不';我的android应用程序不能工作_Android_Listview - Fatal编程技术网

个性化适配器不';我的android应用程序不能工作

个性化适配器不';我的android应用程序不能工作,android,listview,Android,Listview,我正在尝试使用android应用程序中的适配器在我的listView中的项目中添加图像: 这是我的适配器: public class ItemAdapter extends ArrayAdapter<String> { private final Context context; private final String[] Names; private final int rowResourceId; public ItemAdapter(Con

我正在尝试使用android应用程序中的适配器在我的listView中的项目中添加图像:

这是我的适配器:

public class ItemAdapter extends ArrayAdapter<String> {

    private final Context context;
    private final String[] Names;
    private final int rowResourceId;

    public ItemAdapter(Context context, int textViewResourceId, String[] objects) {

        super(context, textViewResourceId, objects);

        this.context = context;
        this.Names = objects;
        this.rowResourceId = textViewResourceId;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View rowView = inflater.inflate(rowResourceId, parent, false);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.imageFileView);
        TextView textView = (TextView) rowView.findViewById(R.id.fileName);

        String name = Names[position];
        String extFile = Names[position].substring(Names[position].lastIndexOf("."));

        textView.setText(name);

        String uri = "drawable/"+extFile;

        // int imageResource = R.drawable.icon;
        //int imageResource = getResources().getIdentifier(uri, null, getPackageName());

        // set image to ImageView
        Uri imgUri=Uri.parse(uri);
        imageView.setImageURI(imgUri);
        return rowView;  
    }
}
公共类ItemAdapter扩展了ArrayAdapter{
私人最终语境;
私有最终字符串[]名称;
私有最终内部资源ID;
公共项适配器(上下文上下文、int textViewResourceId、字符串[]对象){
超级(上下文、textViewResourceId、对象);
this.context=上下文;
这个。名称=对象;
this.rowResourceId=textViewResourceId;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
查看rowView=充气器。充气(rowResourceId,父项,false);
ImageView ImageView=(ImageView)rowView.findViewById(R.id.imageFileView);
TextView TextView=(TextView)rowView.findViewById(R.id.fileName);
字符串名称=名称[位置];
字符串extFile=Names[position]。子字符串(Names[position].lastIndexOf(“.”);
textView.setText(名称);
字符串uri=“drawable/”+extFile;
//int imageResource=R.drawable.icon;
//int-imageResource=getResources().getIdentifier(uri,null,getPackageName());
//将图像设置为ImageView
uriimguri=Uri.parse(Uri);
setImageURI(imgUri);
返回行视图;
}
}
我还在我的应用程序中使用另一个适配器,将pull to refresh添加到我的listView中,但这个适配器工作得非常好

我发现它没有调用我的“ItemAdapter”,因为system.out.print没有显示任何内容

我这样调用适配器:

public void getList(){
    client.get(server+"get/files/1"+folderPath, new JsonHttpResponseHandler() {
        @Override
        public void onSuccess(JSONArray files) {
            String[] listeNames=new String[files.length()];

            for (int i = 0; i < files.length(); i++) {
                try {
                    listeNames[i]=files.getString(i);
                } catch (JSONException e) {
                    System.err.println("error :"+e.getMessage());
                }
            }
            list_files.setAdapter(new ItemAdapter(mainActivity,android.R.layout.simple_list_item_1,listeNames));
            list_files.setAdapter(new ArrayAdapter<String>(mainActivity,android.R.layout.simple_list_item_1,listeNames));
             ((PullToRefreshListView) list_files).onRefreshComplete();               
        }
    });
}
public void getList(){
get(服务器+“get/files/1”+文件夹路径,新的JsonHttpResponseHandler(){
@凌驾
成功时的公共void(JSONArray文件){
String[]listeNames=新字符串[files.length()];
对于(int i=0;i
A
列表视图
只能有一个
适配器
。问题是您正在这样做:

list_files.setAdapter(new ItemAdapter(mainActivity,android.R.layout.simple_list_item_1,listeNames));
list_files.setAdapter(new ArrayAdapter<String>(mainActivity,android.R.layout.simple_list_item_1,listeNames));
list_files.setAdapter(新的ItemAdapter(mainActivity,android.R.layout.simple_list_item_1,listeNames));
list_files.setAdapter(新的ArrayAdapter(mainActivity,android.R.layout.simple_list_item_1,listeNames));
因此,第二个
适配器将覆盖第一个适配器。这就是为什么这个函数工作得很好,以及为什么从来没有调用
ItemAdapter


您应该尝试将这两个
适配器
合并为一个。

是的,我也在考虑这个问题,但我如何才能做到这一点,因为ArrayAdapter不是一个个性化的适配器adapter@yassine__您的自定义适配器扩展了ArrayAdapter,这意味着它继承了ArrayAdapter的所有特性。所以我不明白你的意思,
ArrayAdapter
只是一个用来填充
列表视图的对象。因此,通过扩展
ArrayAdapter
类(就像您对
ItemAdapter
所做的那样),创建您自己的
Adapter
,并将所有逻辑放在这个自定义类中。好吧,我是android新手,所以我不知道这一点。是的,关于android有很多事情需要了解;)如果这个答案对你有用,你可以接受,这样其他面临同样问题的人就会很容易找到解决方法。