Android列表视图项目单击更改文本按钮

时间:2014-10-16 12:29:55

标签: android listview onitemclicklistener

我在做这个android项目时遇到了问题。你能帮我解决这个问题,我想改变onItemClick上的按钮文本。

这是我的CustomerAdapter:

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

        LayoutInflater mInflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

        if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_item, null);
        holder = new ViewHolder();

        holder.member_name = (TextView) convertView
                .findViewById(R.id.member_name);
        holder.product_icons = (ImageView) convertView
                .findViewById(R.id.product_icons);
        holder.status = (TextView) convertView.findViewById(R.id.status);
        holder.addtocart = (Button) convertView
                .findViewById(R.id.btnaddtocart);

        convertView.setTag(holder);

        RowItem row_pos = rowItems.get(position);

        holder.product_icons.setImageResource(row_pos.getProfile_pic_id());
        holder.member_name.setText(row_pos.getMember_name());
        holder.status.setText("P" + row_pos.getStatus());
        holder.addtocart.setText(" add to cart");


       } else {

           holder = (ViewHolder) convertView.getTag();

       }

        return convertView;

以下是我的MainActivity.java代码,其中包含onitemclick listerner

       public void onItemClick(AdapterView<?> parent, View view, int position,
       long id) {

    RowItem item = rowItems.get(position);
    String member_name = item.getMember_name();
       int product_icons = item.getProfile_pic_id();
      String status = item.getStatus();

     Button cart= (Button) view.findViewById(R.id.btnaddtocart);
     cart.setText("Added to cart");


   }

2 个答案:

答案 0 :(得分:0)

只有当点击的项目索引为0时,您的switch语句才会设置文本(如果列表/网格视图中的第一项,则为iow)。点击任何其他项目都不会对您的文本视图执行任何操作。如果您只想在单击某个内容时立即设置文本,请将switch语句替换为cart.setText(&#34; Hello&#34;)。

答案 1 :(得分:0)

让我解决你的问题..

1:单击列表视图项目时获取更改按钮

ans:按钮响应点击事件..所以如果你把它放在listview中它需要从列表视图中点击事件..所以克服它 制作

ListView focusable android:focusable="true"
Button not focusable android:focusable="false"

并添加此

android:descendantFocusability="beforeDescendants" 
列表视图上的

..它使listview在其子项之前获得焦点..现在您转到点击事件,这是您的代码的编辑版本

public void onItemClick(AdapterView<?> parent, View view, int position,
    long id) {

   RowItem item = rowItems.get(position);
   String member_name = item.getMember_name();
   int product_icons = item.getProfile_pic_id();
   String status = item.getStatus();

   Button cart= (Button) view.findViewById(R.id.btnaddtocart);
   cart.setText("Added to cart");
   Toast.makeText(this.getApplicationContext(),"Added to Cart: " + member_name, Toast.LENGTH_SHORT).show();

}

我删除了一些清洁代码,我也删除了这段代码

newadapter = new CustomAdapter(this, rowItems);
mylistview.setAdapter(newadapter);
newadapter.notifyDataSetChanged();

因为它重新设置适配器并且您无法看到正在设置的按钮 并且它也刷新它..大..所以这是我的投球,尝试它让我知道它是否有效 此外,如果您将项目添加到列表视图或删除项目,并且您希望将其显示给用户 你不需要重新设置适配器只需调用notifyDataSetChanged()方法..

EIDT 2:关于禁用该项目

 listview.setOnItemClickListener(new OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                        // TODO Auto-generated method stub
                        if(cart.getText().equals("Added to cart")){ //checking the text of button
                          arg1.setFocusable(false);
                          arg1.setFocusableInTouchMode(false);
                          arg1.setAlpha((float)0.2);// i dont trust this line-(it works) but i want to give you the idea, there are soo many ways of making a view transparent.
                        }

                    }

这会使点击的事件无法响应焦点并将其设置为透明..但如果您只想按钮不响应点击事件,请将setEnabled设置为false,并将焦点设置为false ...按钮&# 34;车&#34 ;.我用记事本写了它,所以检查代码的正确性或任何编码愚蠢

快乐代码