• 环境
  • 项目结构
  • 演示 1:ListView
  • 演示 2:简单 XListView
  • 演示 3:音乐列表 XListView
  • 演示 4:另一个音乐列表 XListView

本文四个演示,循序渐进。

  • 演示 1 只是普通的 Android ListView 控件;
  • 演示 2 是 GitHub 上的 XListView 控件,具备“下拉更新”和“上拉加载”功能,使用是它自己的示例;
  • 演示 3 是将音乐列表的数据应用到 XListView 控件,但只访问一次网络,“下拉更新”和“上拉加载”时循环利用数据;
  • 演示 4 与演示 3 基本一致,唯一的区别是每次“下拉更新”和“上拉加载”时都访问网络,以便跟实际情况更相近。

下载 github XListView

下载 Demo

更多 Demo

环境


  • Windows 2008 R2 64 位
  • Eclipse ADT V22.6.2,Android 4.4.2(API 19)
  • SAMSUNG GT-8618,Android OS 4.1.2

项目结构


Android 演示 Android ListView 和 github XListView(1-3)Android 演示 Android ListView 和 github XListView(1-3)

图 1 项目结构(左:Java 包;右:布局文件)

  • com.example.listviewdemo.adapter 包是 android ListView 和 XListView 控件的adaper;
  • com.example.listviewdemo.config 包只有一个类 Urls,类中只有一个关于音乐列表数据网络地址的静态变量;
  • com.example.listviewdemo.dao 包是业务层,根据网络地址获得音乐列表数据;
  • com.example.listviewdemo.ui 包是演示中使用的 Activity;
  • com.example.listviewdemo.utils 包是工具类;
  • com.example.listviewdemo.widget 包是 github 的 XListView 控件。

Android 演示 Android ListView 和 github XListView(1-3)

图 2 主程序界面

 

演示 1:ListView


利用 AsyncTask 通过网络获得音乐列表数据,数据是 JSON 数组,ListView 控件相应的 adpter 规定了列表中每项是如何显示的。

Android 演示 Android ListView 和 github XListView(1-3)

图 3 演示 1

package com.example.listviewdemo.ui;
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import com.example.listviewdemo.R;
import com.example.listviewdemo.adapter.SimpleListAdapter;
import com.example.listviewdemo.dao.MusicDao;
 
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
 
public class SimpleListActivity extends Activity {
 
    private ListView list;
    private SimpleListAdapter adapter;
    private MusicDao music;
    private JSONArray jsonArray;
 
    /* Button btn; */
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_simplelist);
 
        initClass();
 
        InitListView();
 
        new MyTask().execute(music);
    }
 
    private void initClass() {
        music = new MusicDao();
    }
 
    private void InitListView() {
        list = (ListView) findViewById(R.id.myList_a);
    }
 
    public class MyTask extends AsyncTask<MusicDao, String, String> {
 
        private boolean mUseCache;
 
        public MyTask() {
            mUseCache = true;
        }
 
        public MyTask(boolean useCache) {
            mUseCache = useCache;
        }
 
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }
 
        @Override
        protected String doInBackground(MusicDao... params) {
            MusicDao dao = params[0];
            String result = dao.getData();
            return result;
        }
 
        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            if (!result.isEmpty()) {
                try {
                    jsonArray = new JSONArray(result);
                    adapter = new SimpleListAdapter(SimpleListActivity.this,
                            jsonArray);
                    list.setAdapter(adapter);
                    list.setOnItemClickListener(new OnItemClickListener() {
 
                        @Override
                        public void onItemClick(AdapterView<?> parent,
                                View view, int position, long id) {
                            JSONObject jObject;
                            try {
                                jObject = (JSONObject) jsonArray.get(position);
                                Toast.makeText(getApplicationContext(),
                                        jObject.getString("artist"),
                                        Toast.LENGTH_SHORT).show();
                            } catch (JSONException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    });
                    list.setOnItemSelectedListener(new OnItemSelectedListener() {
 
                        @Override
                        public void onItemSelected(AdapterView<?> parent,
                                View view, int position, long id) {
                            JSONObject jObject;
                            try {
                                jObject = (JSONObject) jsonArray.get(position);
                                Toast.makeText(getApplicationContext(),
                                        jObject.getString("artist"),
                                        Toast.LENGTH_SHORT).show();
                            } catch (JSONException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
 
                        @Override
                        public void onNothingSelected(AdapterView<?> parent) {
                        }
                    });
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}

相关文章:

  • 2021-12-07
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-04
  • 2021-10-10
  • 2021-12-10
  • 2021-09-16
猜你喜欢
  • 2021-11-27
  • 2021-10-19
  • 2021-11-23
  • 2021-06-04
  • 2021-06-07
  • 2021-05-12
相关资源
相似解决方案