2016-05-21 10 views
-1

私のリストビューは次のようになります。フィルタリストビューを拡張baseadapter

--name(文字列) - --Money(int型)--- ---年(int型)----

このリストビューを名前、お金または年ごとにフィルタしたいとします。 各列にImageViewを矢印のように追加して、onClickListenerを呼び出してリストビューフィルタを作成することができます。

下図に見てみましょう:ときマネーによるIMG1 =>名前によるフィルタ、IMG2 =>フィルタをクリック...

そしてここアダプタ

絵によると enter image description here
public class Adapter extends BaseAdapter { 

private Activity activity; 
private LayoutInflater inflater; 
private List<Items> items; 

public Adapter (Activity activity, List<Items> items){ 
    this.activity=activity; 
    this.items =items; 

} 

@Override 
public int getCount() { 
    return items.size(); 
} 

@Override 
public Object getItem(int position) { 
    return items.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if(inflater==null){ 
     inflater=(LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 
    if(convertView==null){ 
     convertView=inflater.inflate(R.layout.items_row,null); 
    } 


     TextView name=(TextView)convertView.findViewById(R.id.acname); 
     TextView money=(TextView)convertView.findViewById(R.id.ac_money); 
     TextView year=(TextView)convertView.findViewById(R.id.ac_year); 

    Items item=items.get(position); 

     name.setText(item.getName()); 

     money.setText(item.getMoney()); 

     year.setText(item.getYear()); 

    return convertView; 
} 

}助けを

おかげ

+0

listadapterの 'getView()'のlistitemsに名前、金額、年号はどのようにマップされますか?基礎となるデータ構造(データベース、コレクションなど)とは何ですか? 'getView()'メソッドを投稿できますか? –

+0

私は投稿を編集するMicha F.助けてくれた – DaveDBar

+0

待って、あなたは "フィルター"を書く - 私はあなたがそれぞれの列をソートする方法を意味したと思った。あなたの質問に私の投稿で答えましたか?それとも違う意味ですか? –

答えて

0

あなたItemクラスでは、以下の追加内部クラス(コンパレータ):あなたのアダプタで

static class NameComparator implements Comparator<Item> { 
    @Override 
    public int compare(Item a, Item b) { 
     return a.getName().compareTo(b.getName()); 
    } 
} 

static class MoneyComparator implements Comparator<Item> { 
    @Override 
    public int compare(Item a, Item b) { 
     return a.getMoney().compareTo(b.getMoney); 
    } 
} 

static class YearComparator implements Comparator<Item> { 
    @Override 
    public int compare(Item a, Item b) { 
     return a.getYear().compareTo(b.getYear); 
    } 
} 

、次のメソッドを追加することができます

public void sortByName(boolean descending) { 
    Collections.sort(items, new Item.NameComparator()); 
    if (descending) Collections.reverse(items); 
    notifyDataSetChanged(); 
} 

public void sortByMoney(boolean descending) { 
    Collections.sort(items, new Item.MoneyComparator()); 
    if (descending) Collections.reverse(items); 
    notifyDataSetChanged(); 
} 

public void sortByYear(boolean descending) { 
    Collections.sort(items, new Item.YearComparator()); 
    if (descending) Collections.reverse(items); 
    notifyDataSetChanged(); 
} 

は今、あなたはのonClick()方法でこれらのメソッドを呼び出すことができます矢印。

+0

こんにちはMicha F.よろしくお願いします。すごい。それは良い仕事です。どうもありがとう。 – DaveDBar

+0

乾杯。私の答えがあなたの問題を解決したら、あなたはそれを表示するためにそれをチェックすることができます、ありがとう:) –

0

Collections.sort()メソッドを使用し、その後にnotifyDataSetChanged()を呼び出します。

関連する問題