1

我实现了一个 JSONArray 来填充 ListView。现在我想按其名称(即其对象属性)的字母顺序对 ListActivity 上的项目进行排序。我怎样才能解决它?

下面是我用来实现 ListView 的 Object 类:

public class VideoLocation {

    public String deleted_at = null;
    public int documentary_video_length = -1;
    public int id = -1;
    public double latitude = 0d;
    public double longitude = 0d;
    public int position = -1;
    public String updated_at = null;
    public String name = null;
    public String text = null;
    public String documentary_video_url = null;
    public String documentary_thumbnail_url = null;
    public String audio_text_url = null;
    public Footage[] footages = null;

    public VideoLocation(){

    }

这是 ListActivity 类:

    public class ProjectsList extends ListActivity implements OnItemClickListener, VideoLocationReceiver{
        /** Called when the activity is first created. */

        private VideoLocation[] videoLocations = null;
        private VideoLocationAdapter videoLocationAdapter = null;

        @Override
        public void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.projects_list);

            doSync();
            //storeSharedPrefs();
            ListView lv = getListView();
            lv.setOnItemClickListener(this);

            videoLocationAdapter = new VideoLocationAdapter(ProjectsList.this, 
                    R.layout.listitems, 
                    new VideoLocation[0]);
            lv.setAdapter(videoLocationAdapter);

            //CREATE VideoLocation[] from Database!

            JsonDB dbhelper = new JsonDB(ProjectsList.this);
            SQLiteDatabase db = dbhelper.getWritableDatabase();

            db.beginTransaction();
            videoLocations = dbhelper.getVideoLocations(db);
            db.setTransactionSuccessful();//end transaction
            db.endTransaction();
            db.close();
        }

        @Override
        public void onResume(){
            super.onResume();
            DBSync.setVideoLocationReceiver(ProjectsList.this);
        }

        @Override
        public void onPause(){
            super.onResume();
            DBSync.setVideoLocationReceiver(null);
        }

        @Override
        public void onItemClick(AdapterView<?> l, View v, int position, long id) {
            Intent listIntent = new Intent(this, ProjectDetailsActivity.class);

            VideoLocation vidLocation = videoLocations[position];
        listIntent.putExtra("documentary_video_url",vidLocation.documentary_video_url);
            startActivity(listIntent);

        }
protected void storeSharedPrefs() {
        final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
        if (prefs.getBoolean("first-time", true)) {
            doSync();
            prefs.edit().putBoolean("first-time", false).commit(); // record the fact that the app has been started at least once
        }
    } 

    void doSync() {
        Intent serviceIntent = new Intent(this, DBSync.class);
        startService(serviceIntent);
    }

    public class VideoLocationAdapter extends ArrayAdapter<VideoLocation> {
        public ImageLoader imageLoader; 
        ImageLoader loader = null;

        public VideoLocationAdapter(Context context, int resource, VideoLocation[] vidLocs) {
            super(context, resource, vidLocs);
            ProjectsList.this.videoLocations = vidLocs;       
            loader = new ImageLoader(context);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            if(convertView == null){
                convertView = ProjectsList.this.getLayoutInflater().inflate(R.layout.listitems, null, true);
            }

            VideoLocation vidLocation = videoLocations[position];
            ImageView v = (ImageView)convertView.findViewById(R.id.image);
            String url = vidLocation.documentary_thumbnail_url;
            v.setTag(url);
            loader.DisplayImage(url, ProjectsList.this, v);
            TextView titleView = (TextView)convertView.findViewById(R.id.txt_title);
            titleView.setText(vidLocation.name);
            return convertView;
        }

        @Override
        public int getCount(){
            return videoLocations==null?0:videoLocations.length;
        }

        @Override
        public VideoLocation getItem(int position){
            return videoLocations[position];
        }

        @Override
        public boolean hasStableIds(){
            return true;
        }

        @Override
        public boolean isEnabled(int position){
            return true;
        }

        @Override
        public long getItemId(int position){
            return videoLocations[position].id;
        }

        public void setVideoLocationData(VideoLocation[] newData){
            ProjectsList.this.videoLocations = newData;
            VideoLocationAdapter.this.notifyDataSetChanged();
        }
    }

    @Override
    public void receivedVideoLocationData(VideoLocation[] vidLocs) {
        final VideoLocation[] locs = vidLocs;

        if (vidLocs==null) {
            runOnUiThread(new Runnable() {

                @Override
                public void run() {

                    //show popup and inform about missing network
                }
            });
        }else{
            runOnUiThread(new Runnable() {

                @Override
                public void run() {

                    videoLocationAdapter.setVideoLocationData(locs);
                    Log.d("ProjectsList", "updating video locations...");
                }
            });
        }
    }

}
4

2 回答 2

4

使用Collections.sort。解析你的 json 并用 VideoLocation 的实例填充一个向量或一个 ArrayList(我认为)。然后调用 Collections.sort。

编辑:

Collections.sort(youarrayList, new Comparator<VideoLocation>() {

            @Override
            public int compare(VideoLocation lhs, VideoLocation rhs) {
                return lhs.name.compareTo(rhs.name);
            }
        });
于 2012-04-27T10:24:50.483 回答
0

getVideoLocations(db)中,您可以告诉您的查询返回使用ORDER BY [Column]排序的结果

于 2012-04-27T10:32:07.437 回答