Как установитьOnclickListener () на кнопку внутри ListView? - PullRequest
5 голосов
/ 14 ноября 2011

В приложении у меня есть Listactivity, у которого есть адаптер с TextView и Button (помеченный как delete). Теперь я хочу удалить соответствующий элемент, нажатый кнопкой. пожалуйста, проверьте код и предложите ???? `

public class MySimpleArrayAdapter extends ArrayAdapter<String> implements OnClickListener {
    private final Activity context;
    private final String[] names;
    private Button deleteButton= null;
    public MySimpleArrayAdapter(Activity context, String[] names) {
        super (context, R.layout.imagelistlayout, names);
        this.context = context;
        this.names = names;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        View rowView = inflater.inflate(R.layout.imagelistlayout, null, true);
        deleteButton= (Button)rowView.findViewById(R.id.delete_bn);
        deleteButton.setTag(position);
        TextView textView = (TextView) rowView.findViewById(R.id.label);
        textView.setText(names[position]);
        deleteButton.setOnClickListener(this); 
        return rowView;

    }

    @Override
    public void onClick(View convertView) {
        System.out.println(deleteButton.getTag());

    }

}` 

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

Ответы [ 4 ]

9 голосов
/ 24 сентября 2013

Вы должны попытаться не жестко кодировать свой обработчик onClick в методе getView, а посмотреть, как вы назначаете метод onClick для просмотра списка.Здесь вы назначаете метод из действия, и это то, что вы должны сделать здесь.

В вашем адаптере создайте метод с именем setOnXXXClickListener

public void setOnXXXClickListener(final OnClickListener onClickListener) {
    this.onXXXClickListener = onClickListener;
}

и в вашем getView назначьте его кнопкевот так

viewHolder.xxx.setOnClickListener(this.onXXXClickListener);

Из вашей деятельности вы можете назначить метод onClick следующим образом

this.adapter.setOnXXXClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.d(TAG, "OnXXXClickListener");
    }
});
8 голосов
/ 14 ноября 2011

просто обработайте прослушиватель щелчков внутри getview, где вы найдете кнопку, используя findviewbyid

это будет обрабатывать текущий щелчок кнопки строки

public class MySimpleArrayAdapter extends ArrayAdapter<String> implements OnClickListener {
    private final Activity context;
    private final String[] names;
    private Button deleteButton= null;
    public MySimpleArrayAdapter(Activity context, String[] names) {
        super (context, R.layout.imagelistlayout, names);
        this.context = context;
        this.names = names;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        View rowView = inflater.inflate(R.layout.imagelistlayout, null, true);
        deleteButton= (Button)rowView.findViewById(R.id.delete_bn);
        deleteButton.setTag(position);
        TextView textView = (TextView) rowView.findViewById(R.id.label);
        textView.setText(names[position]);
       deleteButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                //try to hide textview or something it may help
            }
        });
        return rowView;

    }

}`
0 голосов
/ 14 ноября 2011

Очень просто, у вас есть переменная position int в getView, которая относится к элементу, над которым была надута кнопка, поэтому используйте переменную position, чтобы удалить элемент, по которому вы щелкнули.Просто используйте код ниже.

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        View rowView = inflater.inflate(R.layout.imagelistlayout, null, true);
        deleteButton= (Button)rowView.findViewById(R.id.delete_bn);
        deleteButton.setTag(position);
        TextView textView = (TextView) rowView.findViewById(R.id.label);
        textView.setText(names[position]);
       // deleteButton.setOnClickListener(this); 
deleteButton.setOnClickListener(new OnClickListener()
        {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                //use position here
                            // delete the item from data string havng position index and the use notifydataset
            }

        });
        return rowView;

    }
0 голосов
/ 14 ноября 2011
deleteButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Log.d("TAG", "position: " + position);
        }
    });

И позиция, которую вам нужно сделать для финала в getView (final int position, ..., ...) Когда у вас есть позиция, делайте с ней все, что хотите! Удалить, изменить или еще что-нибудь ..

...