ListView初步解析

在android程序开始中,经常需要用到 ListView组件,所以在此写下此一个人经验,方便大家同时也方便自己。

ListView 一般写在 XML里面,当然也可以用代码动自动创建,默认情况下,ListView 不能放到 ScrollView中使用,如果要一起使用,则重写ListView中的 OnCrollXXX方法。

在开发过程中, ListView 中的 Adapter 一般情况都继承自 BaseAdapter,因为 BaseAdapter 是最灵活的也是最好使的。

在写 Adpter 的过程中,最少需要重写里面的 

getItem();
getCount();
getView(int position, View convertView, ViewGroup parent);
为了节约内存 一般会在 getView(int position, View convertView, ViewGroup parent)方法中判断 当前的 
convertView 是否已经加载 例如这样的代码 
int type = getItemViewType(position);
   if(null == convertView){
     Log.i("view_type","进入 if");
     switch (type){
       case monthNoticeView :
         convertView = LayoutInflater.from(context).inflate(R.layout.love_listen_notice_iterm,parent,false);
         noticeItermViewHolder = new LovelistenNoticeItermViewHolder(convertView);
         convertView.setTag(noticeItermViewHolder);
         break;
       case easyAmomentView :
         convertView = LayoutInflater.from(context).inflate(R.layout.easy_a_moment, parent, false);
         easyAmomentViewHolder = new EasyAmomentViewHolder(convertView);
         convertView.setTag(easyAmomentViewHolder);
         break;
       default:
         break;
     }
   }
else{  // 当有 convertView 的时候,按样式,取得不用的布局
     Log.i("view_type","进入 else");
     switch (type){
       case monthNoticeView :
         if(convertView.getTag() instanceof LovelistenNoticeItermViewHolder){
           noticeItermViewHolder = (LovelistenNoticeItermViewHolder)convertView.getTag();
         }else{
           Log.i("view_type","进入 else 创建 love_listen_notice_iterm");
           convertView = LayoutInflater.from(context).inflate(R.layout.love_listen_notice_iterm,parent,false);
           noticeItermViewHolder = new LovelistenNoticeItermViewHolder(convertView);
           convertView.setTag(noticeItermViewHolder);
         }
         break;
       case easyAmomentView :
         if(convertView.getTag() instanceof EasyAmomentViewHolder){
           easyAmomentViewHolder = (EasyAmomentViewHolder)convertView.getTag();
         }else{
           Log.i("view_type","进入 else 创建 easy_a_moment");
           convertView = LayoutInflater.from(context).inflate(R.layout.easy_a_moment, parent, false);
           easyAmomentViewHolder = new EasyAmomentViewHolder(convertView);
           convertView.setTag(easyAmomentViewHolder);
         }

         break;
       default:
         break;
     }
 当需要加载多种类型的 View 时,则重写 
     public int getItemViewType(int position)  根据当前的 position 类型去加载所需要的view类型。
 假如我们的ListView 中有很多的 Iterm时,我想指定到某一个位置,ListView 为我们提供了 
     public void setSelection(int position) 方法,当指定 position为 0时,则回到 ListView的顶部。
当我们需要加载的 View 过于复杂时,ListView 为我们提供了一个 ListView.addHeaderView(View view);方法,
 我们只需要通过 LayoutInflate的inflate(View view, ViewGroup convertView, boolean flag)方法将需要的View加载上来,
 然后再加载到 ListView 中的 header or footer部份则可。
 当然 ListView 的特性还有很多,比如 ImageView 中的图片异步加载....
我暂时只知道这么多,必要的时候请看 google 老师的:http://developer.android.com/guide/topics/ui/layout/listview.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将JSON数据解析并应用到ListView中,您可以按照以下步骤进行: 1. 获取JSON数据 您可以使用HttpURLConnection或OkHttp等网络库来获取JSON数据。确保在获取数据时处理好异常情况,例如网络不可用或无法连接到服务器。 2. 解析JSON数据 Android提供了一个org.json包,其中包含用于解析JSON数据的类。您可以使用JSONObject和JSONArray类来解析JSON对象和数组。 例如,假设您从服务器上获取了以下JSON数据: ``` { "books": [ { "title": "The Great Gatsby", "author": "F. Scott Fitzgerald" }, { "title": "To Kill a Mockingbird", "author": "Harper Lee" } ] } ``` 您可以使用以下代码解析数据: ```java try { JSONObject jsonObject = new JSONObject(jsonData); JSONArray jsonArray = jsonObject.getJSONArray("books"); ArrayList<Book> bookList = new ArrayList<>(); for (int i = 0; i < jsonArray.length(); i++) { JSONObject bookObj = jsonArray.getJSONObject(i); String title = bookObj.getString("title"); String author = bookObj.getString("author"); bookList.add(new Book(title, author)); } // 将解析的数据应用到ListView中 BookListAdapter adapter = new BookListAdapter(this, bookList); ListView listView = findViewById(R.id.list_view); listView.setAdapter(adapter); } catch (JSONException e) { e.printStackTrace(); } ``` 3. 应用数据到ListView中 创建一个ListView并使用适配器将数据应用到ListView中。您可以创建自己的适配器或使用Android提供的默认适配器,例如ArrayAdapter或SimpleAdapter。 例如,假设您要将解析的书籍数据应用到ListView中,您可以创建一个自定义适配器: ```java public class BookListAdapter extends ArrayAdapter<Book> { private LayoutInflater inflater; public BookListAdapter(Context context, ArrayList<Book> books) { super(context, 0, books); inflater = LayoutInflater.from(context); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = inflater.inflate(R.layout.list_item_book, parent, false); holder = new ViewHolder(); holder.titleTextView = convertView.findViewById(R.id.title_text_view); holder.authorTextView = convertView.findViewById(R.id.author_text_view); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } Book book = getItem(position); holder.titleTextView.setText(book.getTitle()); holder.authorTextView.setText(book.getAuthor()); return convertView; } private static class ViewHolder { TextView titleTextView; TextView authorTextView; } } ``` 其中Book是一个自定义类,用于存储书籍的标题和作者信息。 现在,您可以将适配器应用到ListView中: ```java BookListAdapter adapter = new BookListAdapter(this, bookList); ListView listView = findViewById(R.id.list_view); listView.setAdapter(adapter); ``` 请注意,您需要在布局文件中定义ListView和list_item_book布局。 list_item_book布局应该包含用于显示书名和作者的TextView元素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值