Android 如何在 setOnItemClickListener 中检测第二次点击
Android how to detect second click in setOnItemClickListener
我设法做到了 ListView
其中包含 TextView
。如果单击 TextView
它将显示 ImageButton
,否则第二次单击 ListView
中的 ImageButton
将隐藏。我的问题是我只能在第一次点击时显示 ImageButton
,但当我再次点击 TextView
时我无法隐藏 ImageButton
。任何解决这个问题的建议。
这是我的列表视图setontimeclicklistener
condimentlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView condimentitem =(TextView)view.findViewById(R.id.condcb);
String citem= condimentitem.getText().toString();
ImageView btntick = (ImageView) view.findViewById(R.id.iv_tick);
int visibility = btntick.getVisibility();
if(visibility == View.VISIBLE)
{
btntick.setVisibility(View.GONE);
}
else if(visibility == View.GONE)
{
btntick.setVisibility(View.VISIBLE);
}
ArrayList<String> data = new ArrayList<String>();
data.add(citem);
String array[] = data.toArray(new String[0]);
for (int j = 0; j < array.length; j++) {
remark.append(String.valueOf(array[j]));
}
}
});
如果 textView
单击,这将起作用。但是我不确定这是否可行,因为 textView 在 listView 中。
condimentitem.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(btntick.getVisibility() == View.VISIBLE){
btntick.setVisibility(View.GONE);
}else{
btntick.setVisibility(View.VISIBLE);
}
}
});
我建议你在 adapter
.
中写上 ImageView
和 TextView
正确的方法
在适配器中写入class
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View row = inflater.inflate(R.layout.your_activity, parent, false);
.....
condimentim.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(btntick.getVisibility() == View.VISIBLE){
btntick.setVisibility(View.GONE);
}else{
btntick.setVisibility(View.VISIBLE);
}
}
});
}
我希望这段代码能起作用:
condimentlist.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?>parent,View view,int position,long id){
TextView condimentitem=(TextView)view.findViewById(R.id.condcb);
String citem=condimentitem.getText().toString();
ImageView btntick=(ImageView)view.findViewById(R.id.iv_tick);
if(btntick.getVisibility==View.GONE){
btntick.setVisibility(View.VISIBLE);
}else{
btntick.setVisibility(View.GONE);
}
ArrayList<String>data=new ArrayList<String>();
data.add(citem);
String array[]=data.toArray(new String[0]);
for(int j=0;j<array.length;j++){
remark.append(String.valueOf(array[j]));
}
}
});
您可以使用布尔值作为开关,让您通过 if 语句来回切换。
boolean isClicked = true;
第一次点击使它为真,如果它为真则隐藏 ImageButton,第二次点击使布尔值为假并隐藏 ImageButton
if(true)
ImageBtn.setVisibility(view.VISIBLE)
else
ImageBtn.setVisibility(view.GONE)
您可以使用 SparseIntArray 映射 listView 中每个项目的点击次数
在适配器构造函数中将数组初始化为
public LVAdapter(Context context, int resource, List<String> data) {
super(context, resource);
this.data = data;
sba = new SparseBooleanArray(data.size());
}
然后使用项目的位置作为键将点击次数存储在此数组中
public void onItemClick(...) {
if(!sba.get(position)) // first click
sba.put(position,true);
else{ // second click
// hide the view here
sba.put(position, false); // reset the click if required
}
}
我设法做到了 ListView
其中包含 TextView
。如果单击 TextView
它将显示 ImageButton
,否则第二次单击 ListView
中的 ImageButton
将隐藏。我的问题是我只能在第一次点击时显示 ImageButton
,但当我再次点击 TextView
时我无法隐藏 ImageButton
。任何解决这个问题的建议。
这是我的列表视图setontimeclicklistener
condimentlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
TextView condimentitem =(TextView)view.findViewById(R.id.condcb);
String citem= condimentitem.getText().toString();
ImageView btntick = (ImageView) view.findViewById(R.id.iv_tick);
int visibility = btntick.getVisibility();
if(visibility == View.VISIBLE)
{
btntick.setVisibility(View.GONE);
}
else if(visibility == View.GONE)
{
btntick.setVisibility(View.VISIBLE);
}
ArrayList<String> data = new ArrayList<String>();
data.add(citem);
String array[] = data.toArray(new String[0]);
for (int j = 0; j < array.length; j++) {
remark.append(String.valueOf(array[j]));
}
}
});
如果 textView
单击,这将起作用。但是我不确定这是否可行,因为 textView 在 listView 中。
condimentitem.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(btntick.getVisibility() == View.VISIBLE){
btntick.setVisibility(View.GONE);
}else{
btntick.setVisibility(View.VISIBLE);
}
}
});
我建议你在 adapter
.
ImageView
和 TextView
正确的方法
在适配器中写入class
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = getLayoutInflater();
View row = inflater.inflate(R.layout.your_activity, parent, false);
.....
condimentim.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(btntick.getVisibility() == View.VISIBLE){
btntick.setVisibility(View.GONE);
}else{
btntick.setVisibility(View.VISIBLE);
}
}
});
}
我希望这段代码能起作用:
condimentlist.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?>parent,View view,int position,long id){
TextView condimentitem=(TextView)view.findViewById(R.id.condcb);
String citem=condimentitem.getText().toString();
ImageView btntick=(ImageView)view.findViewById(R.id.iv_tick);
if(btntick.getVisibility==View.GONE){
btntick.setVisibility(View.VISIBLE);
}else{
btntick.setVisibility(View.GONE);
}
ArrayList<String>data=new ArrayList<String>();
data.add(citem);
String array[]=data.toArray(new String[0]);
for(int j=0;j<array.length;j++){
remark.append(String.valueOf(array[j]));
}
}
});
您可以使用布尔值作为开关,让您通过 if 语句来回切换。
boolean isClicked = true;
第一次点击使它为真,如果它为真则隐藏 ImageButton,第二次点击使布尔值为假并隐藏 ImageButton
if(true)
ImageBtn.setVisibility(view.VISIBLE)
else
ImageBtn.setVisibility(view.GONE)
您可以使用 SparseIntArray 映射 listView 中每个项目的点击次数
在适配器构造函数中将数组初始化为
public LVAdapter(Context context, int resource, List<String> data) {
super(context, resource);
this.data = data;
sba = new SparseBooleanArray(data.size());
}
然后使用项目的位置作为键将点击次数存储在此数组中
public void onItemClick(...) {
if(!sba.get(position)) // first click
sba.put(position,true);
else{ // second click
// hide the view here
sba.put(position, false); // reset the click if required
}
}