0

ダミー オブジェクトのリストからフラグメントを生成するカスタム アダプターを作成しました (LevelAdapterゲームのレベルのリストを表示しているため) 。ListView各ダミー オブジェクトにはブール値の「ロック解除」プロパティがあり、基になるダミ​​ー アイテムが「ロック解除」されているかどうかに応じて、リスト内の各アイテムのスタイル プロパティを条件付きで無効にして設定しようとしています。そのために、私も採用しましたViewHolder

以下のコードは、ユーザーが下にスクロールして上に戻るまで正常に機能します。その時点で、「ロック解除された」アイテムは無効になりませんが、適切なスタイルが失われます。

public class LevelAdapter extends ArrayAdapter<DummyContent.DummyItem> {
    private List<DummyContent.DummyItem> objects;
    private DummyContent.DummyItem item;
    private Context context;
    private int textViewResourceId;
    private int resource;

    public LevelAdapter(Context context, int resource, int textViewResourceId, List<DummyContent.DummyItem> objects) {
        super(context, resource, textViewResourceId, objects);
        this.objects = objects;
        this.context = context;
        this.resource = resource;
        this.textViewResourceId = textViewResourceId;

    }

    static class ViewHolder {
        TextView text;
        int position;
        boolean unlocked;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;


        // https://developer.android.com/training/improving-layouts/smooth-scrolling.html#ViewHolder
        ViewHolder holder;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(resource, null);
            holder = new ViewHolder();
            holder.text = (TextView) v.findViewById(textViewResourceId);
            holder.position = position;
            v.setTag(holder);
        } else {
            holder = (ViewHolder) v.getTag();
        }

        item = objects.get(position);
        holder.text.setText(item.title);

        if (item.unlocked == false) {
            holder.text.setTextColor(Color.LTGRAY);
            Typeface type = Typeface.create("", Typeface.ITALIC);
            holder.text.setTypeface(type);
        }

        return v;
    }

    @Override
    public boolean areAllItemsEnabled() {
        return true; // technically untrue, but a hack to show the line divider between items
    }

    @Override
    public boolean isEnabled(int position) {

        item = objects.get(position);
        if (item.unlocked == true) {
            return true;
        } else {

            return false;
        }

    }

} 
4

1 に答える 1

0
    if (item.unlocked == false) {
        holder.text.setTextColor(Color.LTGRAY);
        Typeface type = Typeface.create("", Typeface.ITALIC);
        holder.text.setTypeface(type);
    }

unlocked == trueケースのelseステートメントを作成する必要があります。

これで、アダプターが unlocked false のアイテムを持っていたビューを再利用して、unlocked true のアイテムで埋める場合、スタイルは変更されませんが、古いスタイルは保持されます。

于 2013-07-15T01:37:36.900 に答える