我需要帮助。 我在这里搜索过,但我看到的答案对我不起作用,帖子很旧,功能大多已经弃用了。
我试图在单击时设置按钮的颜色以突出显示它们,并在第二次单击时取消设置颜色。这就像从多个按钮中做出选择一样,如果我再次点击一个选定的按钮,也许在改变我的选择之后,颜色应该恢复为默认值。所以我只剩下所选按钮突出显示。 这些按钮是使用gridview中的适配器生成的,onclicklistener适用于所有这些按钮。 我使用的代码如下所示:
public class ButtonAdapter extends BaseAdapter {
private Context context;
public View getView(int position, View convertView, ViewGroup parent)
{
final Button btn;
if (convertView == null) {
btn = new Button(context);
btn.setLayoutParams(new GridView.LayoutParams(40, 40));
btn.setPadding(2, 2, 2, 2);
}
else {
btn = (Button) convertView;
}
//exus
btn.setText(Integer.toString(gridNumbers[position]));
btn.setTextColor(Color.BLACK);
btn.setId(position);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//btn.setBackgroundColor(Color.GREEN);
//Toast.makeText(getBaseContext(), "Button clicked", Toast.LENGTH_LONG).show();
if (v.getSolidColor()!=Color.GREEN)
{
btn.setBackgroundColor(Color.GREEN);
}
else
{
btn.setBackgroundColor(Color.GRAY);
}
}
});
return btn;
}
}
}
我的XML:
<GridView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="8"
android:columnWidth="20dp"
android:stretchMode="columnWidth"
android:gravity="center" />
答案 0 :(得分:1)
您可以使用布尔属性列表而不是这样做。 在你的类中设置一个公共布尔列表(它应该是公共的,在任何函数之外,否则onclicklistener会有错误)
List<boolean> blist=new Arraylist<boolean>(Size);
//Size is maximum number of buttons
int index;
然后,无论何时创建新按钮,都要添加:
blist.add(index,false);
index++;
在onclicklistener中;从其位置找到按钮的索引,并将索引保存在名为pos。
的整数中if(blist.get(pos)==false)
{
//not clicked yet
blist.remove(pos);
blist.add(pos,true);
//here write the code u need for this if
}
else
{
blist.remove(pos);
blist.add(pos,false);
//todo: ur code for else
}
答案 1 :(得分:0)
使用toggle button代替普通按钮。喜欢
<ToggleButton
android:id="@+id/toggle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/check" //check.xml
android:layout_margin="10dp"
android:textOn=""
android:textOff=""
android:focusable="false"
android:focusableInTouchMode="false"
android:layout_centerVertical="true"/>
然后在drawable文件夹中创建一个xml文件check.xml,如
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- When selected, use grey -->
<item android:drawable="@drawable/selected_image"
android:state_checked="true" />
<!-- When not selected, use white-->
<item android:drawable="@drawable/unselected_image"
android:state_checked="false"/>
</selector>
答案 2 :(得分:0)
在GridView中重复使用的视图。因此,您应该为基本适配器中的按钮定义状态。
获取一个将保存所选索引的ArrayList,并在未选择网格时将其删除。
例如:
ArrayList<Integer> selectedItems;
在Construtor中
selectedItems = new ArrayList<Integer>();
在OnClickListener
中public void onClick(View v) {
if (selectedItems.contains(new Integer(position))) {
selectedItems.remove(new Integer(position));
notifyDataSetChanged();
} else {
selectedItems.add(new Integer(position));
notifyDataSetChanged();
}
}
在getView()中:
if (selectedItems.contains(new Integer(position))) {
btn.setBackgroundColor(Color.GREEN);
} else {
btn.setBackgroundColor(Color.GRAY);
}
答案 3 :(得分:0)
我试过这种方式,如果你想点击
,它对我有用counter = 1;
//By Default set color
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (counter == 1)
{
// Default color
counter = 2;
}
else
{
//your color
counter = 1;
}
}
});