2

SimpleAdapter をオーバーライドします。

class NoticelistAdapter extends SimpleAdapter
 {
    public NoticelistAdapter(Context context,
            List<? extends Map<String, ?>> data, int resource,
            String[] from, int[] to)
    {
        super(context, data, resource, from, to);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        Map<String,Object> map= list.get(position);
        int readState =  (Integer) map.get("ReadState");
        if (readState == 1)
        {
            // do something to change the color of title
        }
        return convertView;
    }
 }

そして、アダプターは次のとおりです。

adapter = new NoticelistAdapter(NoticelistActivity.this, list, R.layout.row_noticelist,
                                    new String[] { "Title", "RealName","Date"}, 
                                    new int[] { R.id.noticetitle, R.id.noticerealname,R.id.noticedate});

各マップには「readstate」と呼ばれる int パラメータがあります。readstate == 1 の場合、「タイトル」(TextView) の色を別の色に変更します。アダプターで getView(...) をオーバーライドする必要があることはわかっていますが、これを行う方法がわかりません。助けてください。前もって感謝します。

4

3 に答える 3

4

Adapter をオーバーライドしてgetItemViewType()2 つの異なるレイアウト フラグgetViewTypeCount()を返し、オーバーライドしてビューの数を返します。次に、フラグに応じて、行レイアウトを次のように設定しますgetView()

 private static final int TYPE_READ = 0;
 private static final int TYPE_NON_READ = 1;
 private static final int TYPE_MAX_COUNT = TYPE_NON_READ + 1;
 //...

    @Override
    public int getItemViewType(int position) {
         int readState =  (Integer) mMap.get("ReadState");
        if(readState==1){
           return TYPE_READ;
        }else{
           return TYPE_NON_READ;
        }

    @Override
    public int getViewTypeCount() {
        return TYPE_MAX_COUNT;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        int type = getItemViewType(position);

        if (convertView == null) {
            holder = new ViewHolder();
            switch (type) {
                case TYPE_READ:
                    convertView = mInflater.inflate(R.layout.item_one, null);
                    //set read layout
                    break;
                case TYPE_NON_READ:
                    convertView = mInflater.inflate(R.layout.item_two, null);
                    // set non-read layout
                    break;
            }
    //etc

ここに完全なチュートリアルがあります。

于 2012-12-16T07:04:50.883 に答える
2

ビューメソッドを取得します。ポジションを確認してください。poistion==row0 の場合、drawable を使用して background を背景色に設定します。リストビューの各行に行の境界線を付けてスタイルをカスタマイズすることもできます。 http://docs.xamarin.com/Android/Guides/User_Interface/Working_with_ListViews_and_Adapters/Part_3_-_Customizing_a_ListViewの_Appearance. リンクが役立ちます。

于 2012-12-16T06:59:04.257 に答える
1

あなたが作成したリストビュー用のカスタムアダプターを使用したと言ったように、次に行う必要があるのは以下のとおりです。アダプターの getView メソッドで、リスト行 xml の親ビューの背景色を設定する必要があります。要件に基づいて各行の色を変更することもできます。

これを参照してくださいリストビューの行ごとに異なる背景色を設定するにはどうすればよいですか?

于 2012-12-16T06:48:25.450 に答える