2014-10-06 101 views
0

我需要关于如何按照字母顺序列出我的数据的帮助。如果我向foldeData添加更多数据,如果我不需要手动移动现有数据以便按字母顺序列出,那就太好了。以ListView字母顺序对数据进行排序

我从MainActivity复制的代码的一部分:

import java.util.concurrent.TimeUnit; 
import android.support.v7.app.ActionBarActivity; 
import com.google.android.gms.ads.*; 
import android.annotation.SuppressLint; 
import android.annotation.TargetApi; 
import android.os.Build; 
import android.os.Bundle; 
import android.os.CountDownTimer; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.Window; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.Toast; 


public class MainActivity extends ActionBarActivity implements OnClickListener { 

    TextView minPastaTimer, maxPastaTimer, tv_start, tv_stop, choice; 

    int minTid, maxTid; 

    private ListView listViewArticles; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.activity_main); 


     Folder[] folderData = new Folder[4];  



     folderData[0] = new Folder(R.drawable.icon_music_folder, "Acomo Pepe", (getString(R.string.acomo_pepe)), "Kogetid 9-10min"); 
     folderData[1] = new Folder(R.drawable.icon_music_folder, "Bucatini", (getString(R.string.Bucatini)),"Kogetid 9-10min"); 
     folderData[2] = new Folder(R.drawable.icon_music_folder, "Bumbola", (getString(R.string.Bumbola)),"Kogetid 9-10min"); 
     folderData[3] = new Folder(R.drawable.icon_music_folder, "Cannelloni", (getString(R.string.Cannelloni)),"Kogetid 9-10min"); 





     FolderAdapter adapter = new FolderAdapter(this, 
       R.layout.listview_item_row, folderData); 



     listViewArticles = (ListView) findViewById(R.id.listView1); 
     listViewArticles.setAdapter(adapter); 

    minPastaTimer = (TextView) findViewById(R.id.minPastaTimer); 
    minPastaTimer.setText("00:00:00"); 
    maxPastaTimer = (TextView) findViewById(R.id.maxPastaTimer); 
    choice = (TextView) findViewById(R.id.tv_choice); 
    maxPastaTimer.setText("00:00:00"); 
    Button btn_italy = (Button) findViewById(R.id.btn_italy); 
    Button btn_danish = (Button) findViewById(R.id.btn_danish); 

    tv_start = (TextView) findViewById(R.id.tv_start); 
    tv_start.setOnClickListener(this); 
    tv_stop = (TextView) findViewById(R.id.tv_stop); 
    tv_stop.setOnClickListener(this); 


    listViewArticles.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 

      String listItemText = ((TextView) view 
        .findViewById(R.id.textViewFolderName)) 
        .getText() 
        .toString(); 

      Toast.makeText(MainActivity.this, 
        "You clicked: " + listItemText, Toast.LENGTH_LONG) 
        .show();  

      if (listItemText.equals("Acomo Pepe")){ 
       minTid=10000; 
       maxTid=20000; 
       choice.setText("Acomo Pepe: " + (getString(R.string.acomo_pepe))); 
       minPastaTimer.setText("00:08:00"); 
       maxPastaTimer.setText("00:09:00"); 
      } 
      else if (listItemText.equals("Bucatini")){ 
      minTid=540000; 
      maxTid=600000; 
      choice.setText("Bucatini - Kogetid: " + (minTid/60/1000) + ("-") +(maxTid/60/1000) + ("min")); 
      minPastaTimer.setText("00:09:00"); 
      maxPastaTimer.setText("00:10:00"); 
      } 
      else if (listItemText.equals("Bumbola")){ 
       minTid=15000; 
       maxTid=30000; 
       minPastaTimer.setText("00:10:00"); 
       maxPastaTimer.setText("00:11:00"); 
       } 
      else if (listItemText.equals("Cannelloni")){ 
       minTid=15000; 
      maxTid=30000; 
      minPastaTimer.setText("00:11:00"); 
      maxPastaTimer.setText("00:12:00"); 
      } 


     } 
    }); 

FolderAdapter:

import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class FolderAdapter extends ArrayAdapter<Folder> { 

    Context mContext; 
    int layoutResourceId; 
    Folder data[] = null; 


    // @mContext - app context 

    // @layoutResourceId - the listview_item_row.xml 

    // @data - the ListItem data 

    public FolderAdapter(Context mContext, int layoutResourceId, Folder[] data) { 

     super(mContext, layoutResourceId, data); 
     this.layoutResourceId = layoutResourceId; 
     this.mContext = mContext; 
     this.data = data; 
    } 


    // @We'll overried the getView method which is called for every ListItem we have. 

    // @There are lots of different caching techniques for Android ListView to 
    // achieve better performace especially if you are going to have a very long ListView. 

    // @convertView - the cache of list item row layout, if it is null, inflate new 

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

     if(convertView==null){ 
      // inflate the listview_item_row.xml parent 
      LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); 
      convertView = inflater.inflate(layoutResourceId, parent, false); 
     } 

     // get the elements in the layout 
     ImageView imageViewFolderIcon = (ImageView) convertView.findViewById(R.id.imageViewFolderIcon); 
     TextView textViewFolderName = (TextView) convertView.findViewById(R.id.textViewFolderName); 
     TextView textViewFolderDescription = (TextView) convertView.findViewById(R.id.textViewFolderDescription); 
     TextView textViewFolderBoilTime = (TextView) convertView.findViewById(R.id.textViewFolderBoilTime); 


     // Set the data for the list item. You can also set tags here if you want. 

     Folder folder = data[position]; 

     imageViewFolderIcon.setImageResource(folder.folderIcon); 
     textViewFolderName.setText(folder.folderName); 
     textViewFolderDescription.setText(folder.folderDescription); 
     textViewFolderBoilTime.setText(folder.folderBoilTime); 

     return convertView; 
    } 

} 

回答

0

我认为最好的做法是排序呼叫adaptor.notifyDataChanged()方法之前的列表。好的是你不必手动做,只需使用比较器进行分类。

你可以看到一个比较example in this link

+0

他的“文件夹“类型必须具有可比性,或创建自定义比较器。 – webo80 2014-10-06 10:03:58

0

而不是使用数组作为数据源的名单中,先用一个列表。至少,这个类扩展了Collection。

您可以定义比较器(例如定义的compareTo()上的自定义类型),你给它之前整理您的收藏:

Collections.sort(<your_list>); 

编辑:对于一般收藏订货,见Guava

相关问题