【问题标题】:Android: Pressing a button in a listview itemAndroid:在列表视图项中按下按钮
【发布时间】:2012-11-06 09:46:10
【问题描述】:

我有一个包含两个按钮的自定义列表视图适配器,问题是很难单击按钮并且它一直失去焦点,或者您必须多次触摸它才能识别点击。

@Override
public View getView(int position, View view, final ViewGroup parent) {

    DataEntity data = entityList.get(position);

    view = inflater.inflate(R.layout.new_mission_row, parent, false);

// inflate other views


    Button playButton = (Button) view.findViewById(R.id.buttonPlay);
    playButton.setBackgroundResource(R.drawable.blue_button);
    playButton.setTextColor(Color.WHITE);
    MyClickListener listener = new MyClickListener(context,entity);
    playButton.setOnClickListener(listener);
    playButton = (Button) view.findViewById(R.id.buttonMap);
    playButton.setBackgroundResource(R.drawable.blue_button);
    playButton.setTextColor(Color.WHITE);
    playButton.setOnClickListener(listener);
    return view;
}

【问题讨论】:

  • 它应该识别点击,点击响应基于你在 onClick() 方法中所做的事情。如果您正在加载大量内容,那么您会觉得点击事件来不及响应。否则你的背景源可能很小,没有完全覆盖按钮表面......
  • 它甚至没有改变可绘制的按下状态,这就是为什么我从等式中排除了我的点击监听器

标签: android listview android-listview adapter


【解决方案1】:

检查您的代码一次。您尚未为 buttonmap 创建不同的按钮对象。

playButton = (Button) view.findViewById(R.id.buttonMap);

在这里,您使用的按钮对象与为 buttonPlay 创建的按钮对象相同

此外,当您填充 ListView 时,您应该使用 ViewHolder pattern 有效地填充 listview。

【讨论】:

  • 是的,我的行中包含的视图似乎不同步,ViewHolder 模式修复了它,再次感谢
【解决方案2】:

见下文。

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

        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            imageLoader = new SISIImageLoader(MY_ACTIVITY.this);
            v = vi.inflate(R.layout.game_display_row, null);
            ViewHolder holder = new ViewHolder();

            holder.deleteGameBtn = (Button) v.findViewById(R.id.deleteGameBtn);


            v.setTag(holder);
        }

        final Gamedata o = items.get(position);

        ViewHolder holder = (ViewHolder) v.getTag();


        if (o != null) {

            Button deleteGameBtn = (Button) v.findViewById(R.id.deleteGameBtn);

            holder.deleteGameBtn.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {

                        // do what you want to do on click 

                    }


            });

        }
        return v;
    }

希望它能解决你的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    相关资源
    最近更新 更多