仿知乎日报第七篇:为菜单区加载布局以及加载数据

一.我们已经把内容区的布局讲完了,具体为这个布局加载数据后面再讲。现在我们先讲一下给菜单区(LeftFragment)加载布局,并且加载数据。因为相较内容区,菜单区的布局,加载都要简单些。

1.先看看具体的效果:


这个结构很简单,整个一个LinearLayout,上面也是一个LinearLayout,里面是一个ImageView加上一个TextView,下面就是一个ListView。所以直接看代码吧:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
 
    <LinearLayout
       android:id="@+id/ll_left_fragement_base_home"
       android:layout_width="match_parent"
       android:layout_height="60dp"
       android:gravity="center_vertical"
       android:orientation="horizontal"
       android:padding="5dp">
 
        <ImageView
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_marginLeft="20dp"
           android:src="@drawable/home" />
 
        <TextView
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_marginLeft="15dp"
           android:text="首页"
           android:textColor="#3CB371"
           android:textSize="20sp"/>
    </LinearLayout>
 
    <ListView
       android:id="@+id/lv_left_fragment_list_view"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       //ListView选中时的背景色
       android:listSelector="#44008B00"
       //不要分割线
       android:divider="@null">
    </ListView>
 
</LinearLayout>


2.这里有个ListView,所以呢,我们当然要为它的item创建布局

效果:


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="20dp"
    android:paddingBottom="20dp" >
 
    <TextView
       android:id="@+id/tv_left_fragment_list_title"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="日常心理学"
       android:textSize="18sp"
       android:layout_marginLeft="20dp"/>
 
    <ImageView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:src="@drawable/menu_arrow"
       android:layout_alignParentRight="true"
       android:layout_marginRight="20dp"
        />
 
</RelativeLayout>


上面布局很简单,只有一个TextView,一个ImageView

.现在我们要在代码中加载布局了

public class LeftFragment extends BaseFragment {
 
    private View         mRoot;
    private LinearLayout mLlHome;
    private ListView     mLvContent;
//  ListView的数据
    private String[]     mDatas = new String[] { "日常心理学", "用户推荐日报", "电影日报",
           "不许无聊", "设计日报", "大公司日报", "财经日报", "互联网安全", "开始游戏", "音乐日报", "动漫日报",
           "体育日报"                };
 
    @Override
    protected View initView() {
//     加载布局,以及拿到布局中的控件
       mRoot = View.inflate(mainActivity, R.layout.left_fragent_base, null);
       mLlHome = (LinearLayout) mRoot
              .findViewById(R.id.ll_left_fragement_base_home);
       mLvContent = (ListView) mRoot
              .findViewById(R.id.lv_left_fragment_list_view);
 
       return mRoot;
    }
 
    @Override
    protected void initData() {
       super.initData();
 
       MyAdapter adapter = new MyAdapter();
//     为ListView设置Adapter
       mLvContent.setAdapter(adapter);
 
    }
 
 
    private class MyAdapter extends BaseAdapter {
 
       /*
        * 返回数据的个数
        */
       @Override
       public int getCount() {
           return mDatas.length;
       }
 
       @Override
       public Object getItem(int position) {
           // TODO自动生成的方法存根
           return null;
       }
 
       @Override
       public long getItemId(int position) {
           // TODO自动生成的方法存根
           return 0;
       }
 
       @Override
       public View getView(int position, View convertView, ViewGroupparent) {
           ViewHolder viewHolder;
           if (convertView == null) {
//            1.加载ListView各个item的布局
              convertView = View.inflate(mainActivity,
                     R.layout.left_fragment_list_item, null);
              viewHolder = new ViewHolder();
//            2.拿到item布局中TextView
              viewHolder.tvTitle = (TextView) convertView
                     .findViewById(R.id.tv_left_fragment_list_title);
              convertView.setTag(viewHolder);
           } else {
              viewHolder = (ViewHolder) convertView.getTag();
           }
//         3.为TextView设置数据
           viewHolder.tvTitle.setText(mDatas[position]);
 
           return convertView;
       }
 
    }
 
    private class ViewHolder {
       TextView   tvTitle;
    }
 
}


上面虽然代码多,但是逻辑很简单:

1)将布局加载进来

2)用数据源来为ListView创建一个Adapter

2)为ListView设置Adapter

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值