私は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...");
}
});
}
}
}