我在做这个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");
}
答案 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 ;.我用记事本写了它,所以检查代码的正确性或任何编码愚蠢
快乐代码