Java 检测第二次单击。setOnItemClickListener()
如何检测第二次单击listview项目的时间 我这样做是为了在单击listview中的项目时,颜色设置为绿色。现在我想要的是第二次点击后颜色会重新改变 有人能解释一下我是怎么做到的吗 这里是我设置绿色的地方:Java 检测第二次单击。setOnItemClickListener(),java,android,android-listview,onitemclicklistener,Java,Android,Android Listview,Onitemclicklistener,如何检测第二次单击listview项目的时间 我这样做是为了在单击listview中的项目时,颜色设置为绿色。现在我想要的是第二次点击后颜色会重新改变 有人能解释一下我是怎么做到的吗 这里是我设置绿色的地方: listView.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> paren
listView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
parent.getChildAt(position).setBackgroundColor(Color.GREEN);
}
});
listView.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
父.getChildAt(位置).setBackgroundColor(颜色.绿色);
}
});
试试这种方法
Boolean flag=false;
listView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
if(flag==false){
parent.getChildAt(position).setBackgroundColor(Color.GREEN);
flag=true;
}
else{
parent.getChildAt(position).setBackgroundColor(Color.RED);
flag=false;
}
}
});
Boolean标志=false;
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
如果(标志==false){
父.getChildAt(位置).setBackgroundColor(颜色.绿色);
flag=true;
}
否则{
父.getChildAt(位置).setBackgroundColor(颜色.红色);
flag=false;
}
}
});
试试这种方法
Boolean flag=false;
listView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
if(flag==false){
parent.getChildAt(position).setBackgroundColor(Color.GREEN);
flag=true;
}
else{
parent.getChildAt(position).setBackgroundColor(Color.RED);
flag=false;
}
}
});
Boolean标志=false;
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
如果(标志==false){
父.getChildAt(位置).setBackgroundColor(颜色.绿色);
flag=true;
}
否则{
父.getChildAt(位置).setBackgroundColor(颜色.红色);
flag=false;
}
}
});
您可以跟踪n次单击
int count = 0; // define globally
view.clickListener(){
count++;
if (count==1)
{
// first click
}
else{
// not first click
}
}
您可以跟踪n次单击
int count = 0; // define globally
view.clickListener(){
count++;
if (count==1)
{
// first click
}
else{
// not first click
}
}
试试这种方法,希望这能帮助你解决问题。 获取包含所有位置和布尔值的HashMap,以确定是否单击:
HashMap<Integer,Boolean> clickMap = new HashMap<Integer, Boolean>();
试试这种方法,希望这能帮助你解决问题。 获取包含所有位置和布尔值的HashMap,以确定是否单击:
HashMap<Integer,Boolean> clickMap = new HashMap<Integer, Boolean>();
只需在侦听器中添加一个属性变量。像这样:
listView.setOnItemClickListener(new OnItemClickListener(){
private Set<Integer> hasClickedSet = new HashSet<Integer>();
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
if (hasClickedSet.contains(position)){
v.setBackgroundColor(Color.BLACK);
} else {
v.setBackgroundColor(Color.GREEN);
hasClickedSet.add(position);
}
}
listView.setOnItemClickListener(新的OnItemClickListener(){
私有集hasClickedSet=newHashSet();
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
如果(hasClickedSet.contains(位置)){
v、 setBackgroundColor(颜色:黑色);
}否则{
v、 setBackgroundColor(颜色:绿色);
已单击设置。添加(位置);
}
}
您不需要调用parent.getChildAt(position),只需使用“v”参数即可
==========编辑============
好的,试试这个:
listView.setOnItemClickListener(new OnItemClickListener(){
private SparseArray<Boolean> hasClicked = new SparseArray<Boolean>();
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
if (hasClicked.get(position, false)){
v.setBackgroundColor(Color.RED);
hasClicked.put(position, false);
} else {
v.setBackgroundColor(Color.GREEN);
hasClicked.put(position, true);
}
}
listView.setOnItemClickListener(新的OnItemClickListener(){
private SparseArray hasClicked=新建SparseArray();
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
if(hascacked.get(位置,false)){
v、 setBackgroundColor(颜色:红色);
hasClicked.put(位置,false);
}否则{
v、 setBackgroundColor(颜色:绿色);
hasClicked.put(位置,true);
}
}
只需在侦听器中添加一个属性变量。如下所示:
listView.setOnItemClickListener(new OnItemClickListener(){
private Set<Integer> hasClickedSet = new HashSet<Integer>();
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
if (hasClickedSet.contains(position)){
v.setBackgroundColor(Color.BLACK);
} else {
v.setBackgroundColor(Color.GREEN);
hasClickedSet.add(position);
}
}
listView.setOnItemClickListener(新的OnItemClickListener(){
私有集hasClickedSet=newHashSet();
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
如果(hasClickedSet.contains(位置)){
v、 setBackgroundColor(颜色:黑色);
}否则{
v、 setBackgroundColor(颜色:绿色);
已单击设置。添加(位置);
}
}
您不需要调用parent.getChildAt(position),只需使用“v”参数即可
==========编辑============
好的,试试这个:
listView.setOnItemClickListener(new OnItemClickListener(){
private SparseArray<Boolean> hasClicked = new SparseArray<Boolean>();
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id){
if (hasClicked.get(position, false)){
v.setBackgroundColor(Color.RED);
hasClicked.put(position, false);
} else {
v.setBackgroundColor(Color.GREEN);
hasClicked.put(position, true);
}
}
listView.setOnItemClickListener(新的OnItemClickListener(){
private SparseArray hasClicked=新建SparseArray();
@凌驾
public void onItemClick(AdapterView父视图、视图v、整型位置、长id){
if(hascacked.get(位置,false)){
v、 setBackgroundColor(颜色:红色);
hasClicked.put(位置,false);
}否则{
v、 setBackgroundColor(颜色:绿色);
hasClicked.put(位置,true);
}
}
如果您试图修改单元格中的任何内容,则第二次单击将不起作用。
为此,请尝试将侦听器置于适配器内,然后更改背景颜色(convertView.setBackground(*)。对我来说,它的工作原理如下:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (viewHolder.addedButton.getVisibility() == View.INVISIBLE) {
viewHolder.addedButton.setVisibility(View.VISIBLE);
convertView.setBackground(any_color_you_want);
listener.onButtonAdd(v, position);
} else {
viewHolder.addedButton.setVisibility(View.INVISIBLE);
convertView.setBackground(any_color_you_want);
listener.onButtonRemove(v, position);
}
}
});
}
在本例中,我尝试创建一个可检查列表。如果您试图修改单元格中的任何内容,则第二次单击将无法工作。 为此,请尝试将侦听器置于适配器内,然后更改背景颜色(convertView.setBackground(*)。对我来说,它的工作原理如下:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (viewHolder.addedButton.getVisibility() == View.INVISIBLE) {
viewHolder.addedButton.setVisibility(View.VISIBLE);
convertView.setBackground(any_color_you_want);
listener.onButtonAdd(v, position);
} else {
viewHolder.addedButton.setVisibility(View.INVISIBLE);
convertView.setBackground(any_color_you_want);
listener.onButtonRemove(v, position);
}
}
});
}
在这个例子中,我试图做一个可检查的列表。当项目单击“基于设置其他背景颜色”时,检查背景颜色。这只是一个建议,取决于你最后想做什么,但你可以做一些类型的计数器,然后在inItemCLick中,只需观察有多少次单击,并在该函数中更改颜色。也许会有比这更好的方法,但同时你可以在“设置其他背景色”的基础上单击“项目”时将背景色移到“检查背景色”。这只是一个建议,取决于你最后想做什么,但你可以做一些类型的计数器,然后在inItemCLick中,只需观察单击的次数,然后进行更改功能中的颜色。可能会比这更好,但同时你可以向前移动。非常好!正是我想要的解决方案类型。谢谢!除了我必须点击项目两次。怎么了?你应该有多个标志。使用SparseArray存储每个项目视图的标志。非常好!例如行为