刷新加载

本文介绍了一个使用Android框架的ItemFragment类实现新闻数据的XML解析过程及ListView的适配展示方法。通过HttpUtils从指定路径获取XML数据并解析为Bean对象列表,最后通过自定义的MyAdapter适配器显示在ListView中。此外,还展示了如何在MainActivity中通过ViewPager和RadioButton切换不同的Fragment。
public class ItemFragment extends Fragment implements IXListViewListener {

    private String path;
    Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            String xml = (String) msg.obj;

            xml(xml);
            xlistView.setAdapter(new MyAdapter(getActivity(), list));
        };
    };
    LinkedList<Bean> list = new LinkedList<Bean>();
    private Bean bean;
    private XListView xlistView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View contextView = inflater.inflate(R.layout.fragment_item, container,
                false);
        xlistView = (XListView) contextView.findViewById(R.id.xlistView);
        // 获取Activity传递过来的参数
        Bundle mBundle = getArguments();
        path = mBundle.getString("arg");
        System.out.println(path + "java");
        xlistView.setPullLoadEnable(true);
        xlistView.setXListViewListener(this);
        getXml();
        return contextView;
    }

    protected void xml(String xml) {

        // 得到解析器
        XmlPullParser pullParser = Xml.newPullParser();
        // 把Stirng转成流
        ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(
                xml.getBytes());
        try {
            pullParser.setInput(new InputStreamReader(arrayInputStream));
            // 得到事件类型
            int eventType = pullParser.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                switch (eventType) {
                case XmlPullParser.START_TAG:
                    // 得到标签名
                    String tagName = pullParser.getName();

                    if ("news".equals(tagName)) {
                        bean = new Bean();
                    } else if ("title".equals(tagName)) {
                        bean.title = pullParser.nextText();
                    } else if ("body".equals(tagName)) {
                        bean.body = pullParser.nextText();
                    } else if ("commentCount".equals(tagName)) {
                        bean.commentCount = pullParser.nextText();
                    } else if ("author".equals(tagName)) {
                        bean.author = pullParser.nextText();
                    } else if ("pubDate".equals(tagName)) {
                        bean.pubDate = pullParser.nextText();
                    }

                    break;

                case XmlPullParser.END_TAG:
                    // 结束标签的名字
                    tagName = pullParser.getName();
                    if ("news".equals(tagName)) {
                        list.addLast(bean);
                    }

                    break;
                }
                eventType = pullParser.next();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    private void getXml() {
        HttpUtils httpUtils = new HttpUtils();
        httpUtils.configCurrentHttpCacheExpiry(0);
        httpUtils.send(HttpMethod.GET, path, new RequestCallBack<String>() {

            @Override
            public void onFailure(HttpException arg0, String arg1) {

            }

            @Override
            public void onSuccess(ResponseInfo<String> arg0) {

                String result = arg0.result;
                System.out.println(result);
                Message msg = Message.obtain();
                msg.obj = result;
                handler.sendMessage(msg);

            }
        });
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public void onRefresh() {
        getXml();

        xlistView.stopLoadMore();
        xlistView.stopRefresh();

    }

    @Override
    public void onLoadMore() {
        getXml();

        xlistView.stopLoadMore();
        xlistView.stopRefresh();

    }

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////



public class MainActivity extends FragmentActivity implements OnClickListener {

    private RadioGroup rg;
    private RadioButton r1;
    private RadioButton r2;
    private RadioButton r3;
    private RadioButton r4;
    private ViewPager pager;
    String[] path = new String[] {
         "字符串"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 找控件
        findView();
        // 设置监听
        r1.setOnClickListener(this);
        r2.setOnClickListener(this);
        r3.setOnClickListener(this);
        r4.setOnClickListener(this);
        pager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {

            @Override
            public int getCount() {
                return path.length;
            }

            @Override
            public Fragment getItem(int arg0) {
                // 新建一个Fragment来展示ViewPager item的内容,并传递参数
                Fragment fragment = new ItemFragment();
                Bundle args = new Bundle();
                args.putString("arg", path[arg0]);
                fragment.setArguments(args);

                return fragment;
            }
        });
        r1.setChecked(true);
        r1.setTextColor(Color.GREEN);
        pager.setOnPageChangeListener(new OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0) {
                switch (arg0) {
                case 0:
                    r1.setChecked(true);
                    r2.setChecked(false);
                    r3.setChecked(false);
                    r4.setChecked(false);
                    r1.setTextColor(Color.GREEN);
                    r2.setTextColor(Color.BLACK);
                    r3.setTextColor(Color.BLACK);
                    r4.setTextColor(Color.BLACK);
                    break;
                case 1:
                    r1.setChecked(false);
                    r2.setChecked(true);
                    r3.setChecked(false);
                    r4.setChecked(false);
                    r1.setTextColor(Color.BLACK);
                    r2.setTextColor(Color.GREEN);
                    r3.setTextColor(Color.BLACK);
                    r4.setTextColor(Color.BLACK);
                    break;
                case 2:
                    r1.setChecked(false);
                    r2.setChecked(false);
                    r3.setChecked(true);
                    r4.setChecked(false);
                    r1.setTextColor(Color.BLACK);
                    r2.setTextColor(Color.BLACK);
                    r3.setTextColor(Color.GREEN);
                    r4.setTextColor(Color.BLACK);
                    break;
                case 3:
                    r1.setChecked(false);
                    r2.setChecked(false);
                    r3.setChecked(false);
                    r4.setChecked(true);
                    r1.setTextColor(Color.BLACK);
                    r2.setTextColor(Color.BLACK);
                    r3.setTextColor(Color.BLACK);
                    r4.setTextColor(Color.GREEN);
                    break;

                default:
                    break;
                }
            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub

            }
        });
    }

    private void findView() {
        rg = (RadioGroup) findViewById(R.id.rg);
        r1 = (RadioButton) rg.findViewById(R.id.r1);
        r2 = (RadioButton) rg.findViewById(R.id.r2);
        r3 = (RadioButton) rg.findViewById(R.id.r3);
        r4 = (RadioButton) rg.findViewById(R.id.r4);
        pager = (ViewPager) findViewById(R.id.pager);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.r1:
            pager.setCurrentItem(0);
            break;
        case R.id.r2:
            pager.setCurrentItem(1);
            break;
        case R.id.r3:
            pager.setCurrentItem(2);
            break;
        case R.id.r4:
            pager.setCurrentItem(3);
            break;
        default:
            break;
        }
    }
}

/////////////////////////////////////////////////////////////////////////////////////////////


public class MyAdapter extends BaseAdapter {
    Context context;
    LinkedList<Bean> list;

    // 有参构造
    public MyAdapter(Context context, LinkedList<Bean> list) {
        super();
        this.context = context;
        this.list = list;
    }

    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return null;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    // 优化代码块
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view;
        ViewHoler holer;
        if (convertView == null) {
            view = View.inflate(context, R.layout.listview, null);
            holer = new ViewHoler();
            holer.lv_title = (TextView) view.findViewById(R.id.lv_title);
            holer.lv_body = (TextView) view.findViewById(R.id.lv_body);
            holer.lv_author = (TextView) view.findViewById(R.id.lv_author);
            holer.lv_pubdata = (TextView) view.findViewById(R.id.lv_pubdata);
            holer.lv_pinlun = (TextView) view.findViewById(R.id.lv_pinlun);
            view.setTag(holer);
        } else {
            view = convertView;
            holer = (ViewHoler) view.getTag();
        }
        holer.lv_title.setText(list.get(position).title);
        holer.lv_body.setText(list.get(position).body);
        holer.lv_author.setText("作者:" + list.get(position).author);
        holer.lv_pubdata.setText("时间:" + list.get(position).pubDate);
        holer.lv_pinlun.setText("评论数:" + list.get(position).commentCount);
        return view;
    }

    class ViewHoler {
        TextView lv_title;
        TextView lv_body;
        TextView lv_author;
        TextView lv_pubdata;
        TextView lv_pinlun;
    }
}

//////////////////////////////////////////////////////////////////////////////////////////////////////

activity_main.xml

<RadioGroup
        android:id="@+id/rg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/r1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:text="资讯" />

        <RadioButton
            android:id="@+id/r2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:text="热点 " />

        <RadioButton
            android:id="@+id/r3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:text="博客" />

        <RadioButton
            android:id="@+id/r4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:text="推荐" />
    </RadioGroup>

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/rg" />
///////////////////////////////////////////////////////////////////////////////////////////

 fragment_item.xml

 <org.com.cctest.view.XListView
               
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        
        android:id="@+id/xlistView"
        
        
        ></org.com.cctest.view.XListView>

/////////////////////////////////////////////////////////////////////////////////////////////////////

listview.xml

    <TextView
        android:id="@+id/lv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="TextView"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/lv_body"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/lv_title"
        android:text="TextView" />

    <TextView
        android:id="@+id/lv_author"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/lv_body"
        android:text="TextView" />

    <TextView
        android:id="@+id/lv_pubdata"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/lv_author"
        android:layout_alignBottom="@+id/lv_author"
        android:layout_marginLeft="44dp"
        android:layout_toRightOf="@+id/lv_author"
        android:text="TextView" />

    <TextView
        android:id="@+id/lv_pinlun"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/lv_pubdata"
        android:layout_alignBottom="@+id/lv_pubdata"
        android:layout_alignParentRight="true"
        android:layout_marginRight="36dp"
        android:text="TextView" />

//////////////////////////////////////////////////////////////////////////////////////////////


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值