Нажмите Событие в классе адаптера в Android - PullRequest
0 голосов
/ 03 января 2012

У меня есть класс Array Adapter, в котором у меня есть 3 поля и один флажок. Я хочу показать события click для каждого textView, мой код приведен ниже. Как запустить событие click в этом классе.я в замешательстве

public class ItemReportAdapter extends ArrayAdapter<SalesForce>{
    private LayoutInflater li;

    public ItemReportAdapter(Context context,List<SalesForce> items){
        super(context,0,items);
        li=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public View getView(int position,View convertView,ViewGroup parent){
        final SalesForce item=getItem(position);

        View v=convertView;
        if(v==null){
            v=li.inflate(R.layout.sfreportview,null);
        }

        final TextView idView=(TextView)v.findViewById(R.id.itemID);
        if(idView!=null){
            idView.setText(""+item.getUserID());
        }

        idView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                popup();                
            }

            private void popup() {

                //what to write in here so as i can be shifted to other  drill down 

            }
        });

        final TextView captionView=(TextView)v.findViewById(R.id.itemCaption);
        if(captionView!=null){
            captionView.setText(item.getName());
        }

        final TextView typeView=(TextView)v.findViewById(R.id.itemType);
        if(typeView!=null){
            typeView.setText(item.getUserType());
        }

        final CheckBox chkbox=(CheckBox)v.findViewById(R.id.checkboxes);

        chkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
                public void onCheckedChanged(CompoundButton buttonView,boolean isChecked){
                        popup();
                }

                private void popup() {
                    // TODO Auto-generated method stub

                }
            });
        return v;
    }
    public long getItemId(int position){
        return getItem(position).getUserID();
    }
    public boolean hasStableIds(){
        return true;
    }

я хочу иметь событие click на idView, как я могу это сделать?Любая помощь будет признательна, спасибо! 1:)

Ответы [ 4 ]

1 голос
/ 03 января 2012

Я собираюсь предположить, что этот адаптер предназначен для представлений внутри ListView.Я вижу, что у вас также есть флажок.Android действительно не любит, когда в ListViews можно щелкать или фокусировать элементы.Вы можете сделать это, но на самом деле не должны.Если у вас есть флажок, то вы действительно хотите использовать «режим выбора» ListView.См. этот пример .Если вы хотите выполнить другие действия с предметами, вы можете использовать долгое нажатие.

0 голосов
/ 15 декабря 2012

Вы должны сделать просмотр списка с держателем, и я думаю, что ваше событие клика должно работать.Но вот еще один код, который вы можете попробовать .. Я написал свой.Но вы можете следить за этим.

class FeedListAdapter extends BaseAdapter {
    ArrayList<LatestFeedInfo> m_list = new ArrayList<LatestFeedInfo>();

    public FeedListAdapter(ArrayList<LatestFeedInfo> list) {
        m_list = list;
    }

    @Override
    public int getCount() {
        return m_list.size();
    }

    @Override
    public Object getItem(int position) {
        return m_list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        View rowView = convertView;
        holder = new ViewHolder();
        if (rowView == null) {
            LayoutInflater li = getLayoutInflater();
            rowView = li.inflate(R.layout.feed_item, null);
            rowView.setTag(holder);

            holder.txtFeedUrl = (TextView) rowView

        } else {
            holder = (ViewHolder) rowView.getTag();
        }

        final LatestFeedInfo feed = m_list.get(position);
        holder.txtFeedUrl.setText(Html.fromHtml(feed.Activity));

        holder.txtFeedUrl.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //here is the click event
            }
        });
        return rowView;
    }

}

public static class ViewHolder {
    TextView txtFeedUrl;
}
0 голосов
/ 03 января 2012

относится к следующему ответу, который похож: https://stackoverflow.com/a/8237375/607968

Проблема с событиями щелчка в элементах просмотра адаптера в том, что вы не будете знать, какой дочерний элемент был нажат.Что вас интересует, так это функции getTag() и setTag(), которые позволяют вам узнать, в каком представлении щелкнули.Обратите внимание, как мы устанавливаем позицию в качестве тега для представления, и получаем позицию внутри onClick.То же самое верно для обработки событий щелчка для любого дочернего элемента в элементе представления адаптера.

0 голосов
/ 03 января 2012

Вам нужно установить focus свойство "ложь" для всей строки, тогда оно должно работать.

...