Измените номер в списке с помощью кнопки (кнопок) в той же строке

1

Я создал пользовательскую ListActivity, которая показывает список навыков и кнопок рядом с ними, а также число. Список выглядит примерно так:

Изображение 174551

Имена навыков извлекаются из базы данных, а также точки (PTS). Мне нужна помощь в определении того, как установить кнопки на стороне, чтобы они были кликабельными, и они увеличивают или уменьшают их номер столбца связанных точек.

Я попробую использовать двойной бонус и спрошу, знает ли кто-нибудь, как я могу извлечь все эти значения и обновить базу данных, из которой они сделаны, возможно, на кнопку "Finalize" в нижней части экрана.

Теги:
click

2 ответа

2
Лучший ответ

После раздувания вашего представления XML используйте findViewById, чтобы найти ваши кнопки, а затем добавить onClickListener()

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

...
final Skill s = (Skill) getItem(position);

if (convertView == null) {
    LayoutInflater li = (LayoutInflater) this.getContext()
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    convertView = li.inflate(R.layout.yourlayout, null);
} else {
  // use cached view
}

Button buttonInc = (Button) convertView.findViewById(R.id.buttonInc);
buttonInc.setOnClickListener(new View.OnClickListener() {
         public boolean onClick(View v) {
                // call to your core class to increase your data (skill object),    
                // preferable using AsyncTask.
         });


Button buttonDec = (Button) convertView.findViewById(R.id.buttonDec);
buttonDec.setOnClickListener(new View.OnClickListener() {
         public boolean onClick(View v) {
                // call to your core class to decrease your data (skill object),
                // preferable using AsyncTask.
         });

....
return convertView;
}

Примечание. Не забудьте кэшировать представление.

Надеемся на эту помощь

  • 0
    Я с тобой до выбора кнопок. Как он находит правильную кнопку, если я добавил их через список записей, т.е. они добавлены программно? У них есть идентификатор (или может), но все они одинаковые, потому что это один и тот же объект, используемый снова и снова.
  • 0
    Извините за задержку ответа: в основном, когда вы надуваете свое представление (трансформируете xml в объект), вы сможете искать вашу кнопку с помощью convertView.findViewById в объекте convertView, который может быть новым, если convertView имеет значение null, или может быть переработан, когда convertView не является нулевым Это не слишком эффективно, но работает. Я напишу лучший пример для вас.
0

Некоторые предположения:

  • У вас есть макет представления с именем skillLayout
  • У вас есть две кнопки с названием skillUp и skillDown
  • Класс умения подобен ниже

    private class Skill {
    
        private int skill = 0;
    
        public void skillUp() {
            skill++;
        }
    
        public void skillDown() {
            skill--;
        }
    }
    

До того, как c & p code ниже, вы должны создать папку с файлами int res/values ​​ids.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item type="id" name="skillId"/>
</resources>

Затем используйте этот код в качестве адаптера навыков

class SkillAdapter extends ArrayAdapter<Skill> {

    public SkillAdapter(Context context, int textViewResourceId,
            List<Skill> skills) {
        super(context, textViewResourceId, skills);
    }

    private final View.OnClickListener skillUpListener = new View.OnClickListener() {
        public void onClick(View v) {
            // Note: a better approach may be call to a method 
            // into your application base class.
            Skill s = (Skill) v.getTag(R.id.skillId);
            s.skillUp();
        }
    };

    private final View.OnClickListener skillDownListener = new View.OnClickListener() {
        public void onClick(View v) {
            // Note: a better approach may be call to a method 
            // into your application base class.
            Skill s = (Skill) v.getTag(R.id.skillId);
            s.skillDown();
        }
    };

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

        final Skill s = getItem(position);

        RecycledView recycled = null;

        if (convertView == null) {

            LayoutInflater li = (LayoutInflater) this.getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            convertView = li.inflate(R.layout.skillLayout, null);

            recycled.buttonUp = (Button) convertView
                    .findViewById(R.id.skillUp);
            recycled.buttonDown = (Button) convertView
                    .findViewById(R.id.skillDown);

            recycled.buttonUp.setOnClickListener(skillUpListener);
            recycled.buttonDown.setOnClickListener(skillDownListener);

        } else {
            recycled = (RecycledView) convertView.getTag();
        }

        recycled.buttonUp.setTag(R.id.skillId, s);
        recycled.buttonDown.setTag(R.id.skillId, s);

                    // Fill the row list with your data

        return convertView;
    }
}

    // For recycling stuff
static class RecycledView {
    Button buttonUp;
    Button buttonDown;
}

Надеюсь, это разъяснит

Привет

Ещё вопросы

Сообщество Overcoder
Наверх
Меню