1

モックアップ したがって、このUIを以下に作成します。大学の授業用で、時間があまりありません。私はすべてが機能していますが、イベントのリストを作成することに頭を悩ませることはできません。リストにデータベースからのデータを取り込むJavaクラスeventListがあります。助言がありますか?2つのボタン(上/下)とデータを提供するのに十分なテキストビューを動的に追加する必要がありますか?そのようなことをした場合、どうすればフォーマットを維持できますか?すべてをmainPageのスクロールビューに配置する必要がありますか?

4

1 に答える 1

1

ListViewカスタムアダプタを使用して作成します。各行はとして設計できるRelativeLayoutので、イベント名や場所などをそこに入れることができます。

アダプタは次のようになります:(コードサニタイズ)

public class POPublicationAdapter extends ArrayAdapter<Wrap<POUserPublication>> {
    private final Context context;
    ... 
    private OnClickListener faveClick;
    private OnClickListener shortClick;
    ...

    public POPublicationAdapter( Context context, List<WrapPO<POUserPublication>> values, 
            OnClickListener faveClick, OnClickListener shortClick, ... ) {
        super(context, R.layout.row_publication, values);
        this.context = context;
        this.listId = listId;
        this.faveClick = faveClick;
        this.shortClick = shortClick;
            ...
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        WrapPO<POUserPublication> item = getItem(position);
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = null;

        if( item.item != null ){
            rowView = inflater.inflate(R.layout.row_publication, parent, false);
            rowView.setTag( item );
            TextView tvLabel = (TextView) rowView.findViewById(R.id....);
            ImageView ivPubFavorite = (ImageView) rowView.findViewById(R.id....);

            TextView tvSubLabel = (TextView) rowView.findViewById(R.id.publicationSublabel);
            tvLabel.setText( item.item.pub().get( PO.displayName ) );
            if( !item.item.pub().existsDefault() ) {

            }
            if( listId == POLayer.LIST_REQUIRED ) 
                tvSubLabel.setText(String.format("(Due on %1$TD)", item.item.asDate( PO.dueDate )));
            else if( listId == POLayer.LIST_PREVIEW )
                tvSubLabel.setText( String.format( "(Preview until %1$TD)", item.item.pub().asDate( PO.distributionDate ) ) );
            else
                tvSubLabel.setText( item.item.getTouchInfo() );

            if( this.listId == POLayer.LIST_FAVE ){
                setOfflineImage(ivPubFavorite, SG.isOnline, item.item.isFavorite() ? R.drawable.ls_star_remove : R.drawable.ls_star_grey );
            } else {
                setOfflineImage(ivPubFavorite, SG.isOnline, item.item.isFavorite() ? R.drawable.ls_star_gold : R.drawable.ls_star_grey );
            }
            ivPubFavorite.setClickable(true);
            ivPubFavorite.setTag(item);
            ivPubFavorite.setOnClickListener( faveClick );

            ivNot.setClickable( false );
            if( listId == POLayer.LIST_REQUIRED || listId == POLayer.LIST_UNREAD ) {
                ivNot.setTag(item);
                ivNot.setOnClickListener( notClick );
                if( item.item.isRequired() ) {
                    if( item.item.isComplete() ) {
                        setOfflineImage( ivNot, item.item.asString( PO.offlineUTC ).isEmpty(), R.drawable.ls_doc_confirmed );
                    } else {
                        ivNot.setClickable(true);
                        ivNot.setImageResource( R.drawable.ls_doc_pencil );
                    }
                } else {
                    if( item.item.isComplete() ) {
                        ivNot.setImageResource(R.drawable.ls_check_green);
                    } else {
                        ivNot.setClickable(true);
                        setOfflineImage( ivNot, SG.isOnline, R.drawable.ls_check_grey );
                    }
                }   
            } else {
                ivNot.setVisibility( View.GONE );
            }
        } else {
            switch( item.itemType ) {
            case WrapPO.HEADER_EMPTY:
                rowView = inflater.inflate( R.layout.row_header_empty, parent, false);
                break;
            case WrapPO.HEADER_MORE:
                rowView = inflater.inflate( R.layout.row_header_more, parent, false);
                break;
            default:
                rowView = inflater.inflate( R.layout.row_header, parent, false);
            }
            TextView tvLabel = (TextView) rowView.findViewById(R.id.tvHeader);
            tvLabel.setText( item.itemHeader );
        }
        rowView.setOnLongClickListener( longClick );
        rowView.setOnClickListener( shortClick );
        return rowView;
    }
    @Override
    public long getItemId(int position) {
        if( getItem( position ).item != null )
            return getItem(position).item.asInteger( PO.pubId );
        else
            return (long) -1;
    }
}

これはおそらく必要なもののもう少し複雑な例ですが、行の内容に基づいて行にさまざまなレイアウトを使用する方法を示しており、投票ボタンに必要な場合と同じように、クリック可能なImageViewが含まれています。

于 2012-11-09T06:25:39.110 に答える