【问题标题】:How to create my above listview to look more professional?如何创建我上面的列表视图看起来更专业?
【发布时间】:2011-05-09 01:03:44
【问题描述】:

谁能告诉我应该如何创建看起来相似的列表视图 [这里][1]。

问题:我将如何在我的代码中实现具有图标、文件名和文件大小的外观和感觉,同时在每个文件对象上看起来干净和简单,如示例中所示链接[这里][2]??

有人可以指导这件事吗,因为我是 android/java 的新手...谢谢

【问题讨论】:

    标签: java android xml listview


    【解决方案1】:

    参考关注url for how to implement custom listview

    更新

    public static class VideoInfo   {
            public String name = "";
            public String size= "";
            public String path = "";//add any more variables of which you want info
        }
    

    然后你在哪里创建arraylist,即getVideoFiles()创建这个类的对象 声明ArrayList<VideoInfo> videoItems;

    private void getVideoFiles(File[] videoList) 
     {
          videoItems = new ArrayList<VideoInfo>();
    
          for (int i = 0; i < videolist.length; i++) 
          {
            File mfile = videoList[i];
          String path = mfile.getPath();
          path = path.substring(path.lastIndexOf("/", path.indexOf("."));
          VideoInfo model = new VideoInfo();
          model.name = path;
          model.size = mfile.length();
    
          videoItems.add(model);
          }
    
          setListAdapter(new ListViewAdapter(this, R.layout.row, videoItems));  
     }
    

    现在在你的适配器中传递这个arraylist对象,你如何在listview中设置变量已经在上面的链接中给出了

    【讨论】:

    • @T0X1C 你好,你能推荐一下上面的答案集如何帮助我解决我的问题,在这里我尝试使用 HERO 答案但不知道需要调整什么才能使其工作 --> @ 987654322@
    • @T0X1C 嗨,您可以告诉我如何让我的视频文件名填充我上面的文本视图以获取上面的代码?以及如何删除这些字符串后面的 .mp4 和 .3gp 字符串?
    • @T0X1C 在上面更新了,但是为什么我做错了什么到处都有错误?
    • 看,我已经给出了一个大致的想法,并且非常具体地解决了您的问题,而不是这里没有人或没有人可以帮助您解决问题,因为它们可能与一些 Java 语言相关
    • @T0X1C 对不起,如果我问得太多,因为我在编程方面很差,更糟糕的是,我对 android/java 还很陌生,并且运行时间很短来完成这个项目两周后.. :(
    【解决方案2】:

    问题 2:为什么我的列表视图是 目录时出错 尽管有这个要处理,但还是空的 我的 xml 中的“空”

    你记得给你的列表视图命名吗?:

    @id/android:list
    

    如果您可以提供进一步的帮助请解决问题 1,那么它会更清晰简洁。

    更新

    列表视图的ID应该是:@id/android:list

    texview的ID应该是:@id/android:empty

    【讨论】:

    • @JoxTraex 我做了一些编辑,但我仍然不太清楚如何解决问题 1 和 2?你能帮忙吗?
    • @JoxTraex 尽管进行了更改,但仍然有错误。目录不为空时可以,但是当目录为空时,它会给出空指针...不应该显示textview吗?这里有什么问题?
    • 请用您所做的修改更新您的帖子。如果发生崩溃,也发布您的 logcat。
    • @JoxTraex 更新:抱歉第一次发布 logcat,我花了一些时间才弄清楚..
    • @JoxTraex 问题 2 已解决。但是您能帮我解决问题 1 吗?我真的不知道如何获得此链接中看到的那种外观和布局softwarepassion.com/…
    【解决方案3】:

    您尚未创建自定义适配器以将布局合并到代码列表视图中。 这是你可以使用的东西

    private class ListViewAdapter extends ArrayAdapter<Object> {
            private ArrayList<Object> items;
    
            public ListViewAdapter(Context context, int textViewResourceId,
                    ArrayList<Object> items) {
                super(context, textViewResourceId, items);
                this.items = items;
    
            }
    
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
                View v = convertView;
                Object info = items.get(position);
                if (v == null) {
                    LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    v = vi.inflate(R.layout.row, null);
                }
    
                if (info != null) {
                    ImageView imView = (ImageView) v.findViewById(R.id.icon);
                    TextView txtname =(TextView) v.findViewById(R.id.toptext);
                    TextView txtAddr = (TextView) v.findViewById(R.id.bottomtext);
                    //set image and set text as you like
                }
                return v;
            }
        }
    

    希望这能有所帮助。

    【讨论】:

    • 您好,感谢您的回答,我只是将代码复制到我的代码中就可以正常工作还是需要进行一些调整/修改才能使其正常工作?
    • 为什么在实现你的代码后图标似乎填满了整个显示屏?我在上面的代码中做错了什么吗?
    【解决方案4】:

    首先为列表中的每一行创建要显示的布局,然后扩展 BaseAdapter 类以自定义列表。此类包含 getView 方法,可以根据需要多次复制列表中的行。

    类 HighScoreAdapter 扩展 BaseAdapter { /* 布局充气器将您的 XML 布局转换为要在每行列表中呈现的视图。*/ 私有 LayoutInflater minflator = LayoutInflater.from(HighScoreList.this); ViewHolder 支架;

        @Override
        public Object getItem(int position)
        {
            return position;
        }
    
        @Override
        public long getItemId(int position)
        {
            return position;
        }
        boolean toRemove = false;
        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
                        /* first time is null */
            if (convertView == null )
            {
                convertView = minflator.inflate(R.layout.highscorelist, null);
                holder = new ViewHolder();
                holder.rank = (TextView) convertView.findViewById(R.id.user_id);
                holder.username = (EditText) convertView.findViewById(R.id.user_nameedit);
                holder.time = (TextView) convertView.findViewById(R.id.user_time);
                convertView.setTag(holder);
            }
            else
            {
                holder  =   (ViewHolder) convertView.getTag();
            }
    
            holder.rank.setText(String.valueOf(position+1)+".");
    
            /* returns the view for next row as layout will be same i.e. this increases the your list's scrolling and working faster even though your list contains thousands of Entry*/
            return convertView;
        }
                 /* this class is to make reference to your child views of your layout by using this you can set your child views properties and Listeners acording to your need.*/
        class ViewHolder
        {
            TextView rank;
            EditText username;
            TextView time;
        }
    
    }
    

    我希望这能彻底解决你的问题.. :)

    【讨论】:

    • @Deepak Sharma 嗨,感谢您的回答,但哪一组答案最适合我的情况?
    • 感谢您向我提问 .. 我告诉您的方式和@HERO 描述的方式非常相似,我已经稍微增强了一点.. 因为您必须在每一行注册监听器您的列表或列表的子视图(我认为您肯定会想要实现一些功能,例如单击文件播放一些音频或其他功能).. 除非您的屏幕仅包含列表,否则不要扩展到 ListActivity..我希望现在这消除了您的疑问.. :)
    • @Deepak Sharma 你能帮帮我吗,因为我向我的讲师展示了你和 HERO 之间的系列,他告诉我用他的作为“参考”而不告诉我如何实现 HERO 的代码进入我的代码... :(我能告诉我怎么做吗?上面更新但它不起作用?
    • @Deepak Sharma 你能帮忙吗?因为我真的不知道我应该在我的代码中修改什么以使其与 HERO 示例的“参考”一起使用?
    • 你能告诉我你在你的项目数组列表中得到了什么信息,即我猜你得到的只是存储文件的路径..你只想显示那些..回复我sson 尽可能:)
    【解决方案5】:

    将此方法添加到您的代码中,如果您遇到任何错误或异常,请告诉我。

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            Object info = items.get(position);
            if (v == null) {
                LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.row, null);
            }
    
            if (info != null) {
                ImageView imView = (ImageView) v.findViewById(R.id.icon);
                TextView txtname =(TextView) v.findViewById(R.id.toptext);
                TextView txtAddr = (TextView) v.findViewById(R.id.bottomtext);
                //set image and set text as you like
    
                   imview.setImageBitmap(IMAGE YOU WANT TO SET AAS ICON);
    
                   txtname.setText(FILENAME YOU WANT TO SET);
    
                   txtadr,setText(FILESIZE YOU WANT TO SET);
    
                  // Better you take each info filename,filesize and icon in a arraylist and set them 
    
            }
    
    
            return v;
        }
    

    【讨论】:

    • @Deepak Sharma 我完全按照你说的做了,虽然应用程序运行了,但不幸的是它显示了一个大图标,几乎覆盖了整个显示屏,而不是这里显示的东西 --> softwarepassion.com/… 或者是如链接所示,我必须进行某种尺寸比较?如果是这样,是否有更简单的编码方法,因为我不明白代码在说什么...... :(
    • @Deepak Sharma 为什么我的图标图像会覆盖整个显示屏?
    • @Deepak Sharma 我的另一个问题是我如何获得删除视频文件名每个字符串后面的“.mp4”或“.3gp”的名称?这意味着该语句现在正在使用? for(文件文件:videoList){videoItems.add(file.getName()); }
    • 不要在 row.xml 中为 ImageView 使用 android:layout_height="fill_parent" 而不是使用 android:layout_height="wrap_content"..
    • @Deepak Sharma 所以我实际上可以删除“ImageView imView = (ImageView) v.findViewById(R.id.icon);”和“imview.setImageBitmap(您想要设置 AAS 图标的图像);”对,因为 xml 将改为处理图标?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2014-08-24
    • 2012-06-24
    • 2015-04-15
    • 1970-01-01
    • 2016-10-16
    相关资源
    最近更新 更多