2014-10-16 87 views
-2

我有一个问题,做这个android项目。你能帮我解决这个问题,我想改变onItemClick上的按钮文字。Android的列表视图itemclick更改文本按钮

这是我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"); 


    } 
+0

与你的这段代码会发生什么最初兄弟?如果您想更改文字,请在初始化后直接设置文字以及为什么切换? – Elltz 2014-10-16 12:37:18

回答

0

让我杀了你的问题..

1:获取按钮,当您单击列表视图项

ANS变化:按键响应单击事件..所以,如果你把它放在列表视图需要单击事件从列表视图..所以克服它 使

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(); 

,因为它设置适配器一遍,你不要看到按钮被设置 并刷新它also..lol ..所以这是我的球场,试试吧并让我知道如果它的作品 也如果你添加项目到你的列表查看或删除项目,你想展示给你不需要用户 重新设置适配器只需要调用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 ..在按钮“cart”上。我用记事本写了这样检查的代码的正确性或任何作弄愚蠢

幸福代码

+0

非常感谢! – 2014-10-17 12:22:19

+0

我想添加其他问题。我想在改变我的按钮和禁用项目点击位置的文本后实现。非常感谢你。 – 2014-10-17 12:40:01

+0

禁用项目点击为listview或buttom ?? @ paulbuscano或禁用响应点击事件的特定项目? – Elltz 2014-10-17 13:27:25

0

你的switch语句设置文本只有被点击项目的索引是0(督察列表/网格视图中的第一项)。点击任何其他项目都不会对你的textview做任何事情。如果您只是想在点击某些内容时设置文本,请使用cart.setText(“Hello”)替换switch语句。

+0

我会做什么?我想实现的是当我点击一个列表视图上的特定项目时,我想单击它后更改我的按钮的文本。 – 2014-10-17 00:14:57