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を解析し、VectorまたはArrayList(私は思う)にVideoLocationのインスタンスを入力します。次に、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

では、 ORDER BY [Column]getVideoLocations(db)を使用して、ソートされた結果を返すようにクエリに指示できます。

于 2012-04-27T10:32:07.437 に答える