изменить пользовательский элемент списка

1

Infact У меня есть listview, и у него есть "два изображения + два текстовых изображения" в качестве элемента.

То, что я точно хочу сделать, это то, что я хочу изменить текст текста, когда пользователь нажимает на изображение.

public class ListViewCustomAdapter extends BaseAdapter implements OnClickListener{

'ViewHolder holder;'
'ArrayList<Object> itemList;'

'public Activity context;'
'public LayoutInflater inflater;'

'public ListViewCustomAdapter(Activity context,ArrayList<Object> itemList) {'
    'super();'

    'this.context = context;'
    'this.itemList = itemList;'

    'this.inflater =' '(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);'
'}'

'@Override'
'public int getCount() {'
    '// TODO Auto-generated method stub'
    'return itemList.size();'
'}'

'@Override'
'public Object getItem(int position) {'
    '// TODO Auto-generated method stub'
    'return itemList.get(position);'
'}'

'@Override'
'public long getItemId(int position) {'
    '// TODO Auto-generated method stub'
    'return 0;'
'}'

'public static class ViewHolder'
'{'
    'ImageView plus;'
    'ImageView minus;'
    'TextView question;'
    'TextView score;'
'}'

'@Override'
'public View getView(int position, View convertView, ViewGroup parent) {'
    '// TODO Auto-generated method stub'


    'if(convertView==null)'
    '{'
        'holder = new ViewHolder();'
        'convertView = inflater.inflate(R.layout.listitem_row, null);'

        'holder.plus = (ImageView) convertView.findViewById(R.id.plus);'
        'holder.minus = (ImageView) convertView.findViewById(R.id.minus);'

        'holder.plus.setOnClickListener(this);'
        'holder.minus.setOnClickListener(this);'

        'holder.question = (TextView) convertView.findViewById(R.id.question);'
        'holder.score = (TextView) convertView.findViewById(R.id.score);'

                    'convertView.setTag(holder);'
    '}'
    'else'
        'holder=(ViewHolder)convertView.getTag();'

    'ItemBean bean = (ItemBean) itemList.get(position);'

    'holder.minus.setImageResource(bean.getminus());'
    'holder.plus.setImageResource(bean.getplus());'
    'holder.question.setText(bean.getquestion());'
    'holder.score.setText(bean.getscore());'

    'return convertView;'
'}'

'@Override'
'public void onClick(View v) {'
    'switch(v.getId()) {'
        'case R.id.minus:'
        '{'

            'int score = Integer.getInteger(holder.score.getText().toString());'
            'holder.score.setText(Integer.toString(score-1));'
            'break;'
        '}'
        'case R.id.plus:'
        '{'

            'int score = Integer.getInteger(holder.score.getText().toString());'
            'holder.score.setText(Integer.toString(score+1));'
            'break;'
        '}'
    '}}'

}

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

Plz помогите мне!

  • 0
    вставьте свой logcat
  • 0
    проблема с прослушивателем кликов?
Теги:
listview

5 ответов

1

Всем спасибо.

Но решение моей проблемы было довольно простым и умным. Я решил.

я прикрепил держатель, используя holder.minus.setTag (держатель); против каждого элемента (кнопка/изображение) каждой строки списка, а затем в Onclick Listener этой конкретной кнопки /imageView я использую owner = (ViewHolder) v.getTag(); использовать этот конкретный держатель для этого элемента ListView :) Have Fun

@Override public View getView (int position, View convertView, родительская группа ViewGroup) {

        int type = getItemViewType(position);

        System.out.println("getView " + position + " " + convertView + " type = " + type);
        if (convertView == null) {
            holder = new ViewHolder();
            switch (type) {
                case TYPE_ITEM:
                    convertView = mInflater.inflate(R.layout.item, null);
                    holder.score = (TextView)convertView.findViewById(R.id.score);
                    holder.question = (TextView)convertView.findViewById(R.id.question);
                    holder.plus = (ImageView)convertView.findViewById(R.id.plus);


                    holder.minus = (ImageView)convertView.findViewById(R.id.minus);

holder.plus.setTag (держатель); holder.minus.setTag (держатель);

                    holder.minus.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View v) {

                            holder = (ViewHolder)v.getTag();

                            String test =holder.score.getText().toString();

                    }
                        }
                    });


                    holder.plus.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View v) {

                            holder = (ViewHolder)v.getTag();

                            String test =holder.score.getText().toString();

                                                    }
                    });


                    break;
                case TYPE_SEPARATOR:

                    convertView = mInflater.inflate(R.layout.heading, null);
                    holder.score = (TextView)convertView.findViewById(R.id.textSeparator);
                    holder.score.setText(mData.get(position));
                    break;
            }
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder)convertView.getTag();
        }
        switch (type) 
        {
            case TYPE_ITEM:

                String temp = mData.get(position);

                break;
            case TYPE_SEPARATOR:

                holder.score.setText(mData.get(position));

                break;
        }
        return convertView;
    }

}
  • 0
    "TYPE_SEPARATOR" "TYPE_ITEM", где вы объявили эту переменную
1

Вместо convertView.setTag (держатель); holder = (ViewHolder) convertView.getTag(); ' используйте convertView.setId (держатель); и holder = (ViewHolder) convertView.getId();

1

Лучше всего установить onClickListener для ListItem при его создании. Затем вы можете указать, что делает этот ListItem при щелчке, чтобы вы могли изменить его текст TextView.

Здесь действительно хороший учебник по созданию этой настройки: http://www.ezzylearning.com/tutorial.aspx?tid=1351248&q=handling-android-listview-onitemclick-event

0

Не используйте еще замену ниже кода

'if(convertView==null)'
    '{'
        'holder = new ViewHolder();'
        'convertView = inflater.inflate(R.layout.listitem_row, null);'

        'holder.plus = (ImageView) convertView.findViewById(R.id.plus);'
        'holder.minus = (ImageView) convertView.findViewById(R.id.minus);'

        'holder.plus.setOnClickListener(this);'
        'holder.minus.setOnClickListener(this);'

        'holder.question = (TextView) convertView.findViewById(R.id.question);'
        'holder.score = (TextView) convertView.findViewById(R.id.score);'

                    'convertView.setTag(holder);'
    '}
        'holder=(ViewHolder)convertView.getTag();'

    'ItemBean bean = (ItemBean) itemList.get(position);'

    'holder.minus.setImageResource(bean.getminus());'
    'holder.plus.setImageResource(bean.getplus());'
    'holder.question.setText(bean.getquestion());'
    'holder.score.setText(bean.getscore());'

    'return convertView;'
'}'
  • 0
    это не имеет никакого значения
  • 0
    Скажите мне, где вы получаете NullPointer Exceptiom ..
Показать ещё 2 комментария
0

Во-первых, вы не назначаете прослушиватель onClick любому из ваших представлений в базовом адаптере.

Во-вторых, вместо использования события onClick для представлений в строке я предлагаю вам использовать OnItemClickListener для вашего ListLiew. Это довольно прямолинейно и лучше использовать для кликов позиции строки

например:

private OnItemClickListener lstClick = new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view,
                 int position, long id) {

        //do whatever you want here
    }
};

и установите его в ListView как:

listView.setOnItemClickListener(lstClick);
  • 0
    OnItemClickListener для ListActivity, и я вместо этого работаю над Activity ... еще спасибо !!
  • 0
    OnItemClickListener предназначен для ListView, а ListActivity является производной формой ListView с Activity. Так что мое предложение остается в силе. Вы можете использовать OnItemClickListener для ListView.
Показать ещё 2 комментария

Ещё вопросы

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