gpt4 book ai didi

java - longclick时, ListView 中的删除按钮项目出现在另一个位置

转载 作者:行者123 更新时间:2023-11-30 02:44:31 25 4
gpt4 key购买 nike

我想在我的 ListView 项目中的每个项目上放置一个删除按钮。当用户长按 listView 中的 textview Item 时,这个按钮必须出现:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/mybackground"
android:orientation="horizontal" >


<EditText
android:id="@+id/edittext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dip"
android:layout_weight="2"
android:inputType="textMultiLine"
android:singleLine="false"
android:textSize="12dp"
android:visibility="gone" >

</EditText>

<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="2dip"
android:layout_weight="2"
android:singleLine="false"
android:textColor="#000000"
android:textSize="14dp" >

</TextView>

<ImageButton
android:id="@+id/editButton"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/ic_menu_close_clear_cancel"
android:visibility="gone" />

</LinearLayout>

这是Java代码:

      public View getView(int position, View convertView, ViewGroup parent) {

ViewHolder holder = null;

if (convertView == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.affichageitem, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.textview);
holder.button = (ImageButton) convertView.findViewById(R.id.editButton);
convertView.setTag(holder);

holder.button.setOnClickListener( new View.OnClickListener() {
public void onClick(View v) {
ListView listView0=(ListView)findViewById(R.id.listView0);
Toast.makeText(getApplicationContext(),"Clicked on position : " + listView0.getPositionForView(v),Toast.LENGTH_SHORT).show();
}
});

holder.text.setOnClickListener( new View.OnClickListener() {
public void onClick(View v) {
TextView tv = (TextView) v ;
Toast.makeText(getApplicationContext(),"Clicked on app : " + tv.getText(),Toast.LENGTH_LONG).show();
}
});


holder.text.setOnLongClickListener( new View.OnLongClickListener() {
public boolean onLongClick(View v) {
TextView tv = (TextView) v ;
ImageButton editButton = (ImageButton) findViewById(R.id.editButton);
editButton.setVisibility(View.VISIBLE);
editButton.setOnClickListener( new View.OnClickListener() {
public void onClick(View v) {
ImageButton iB = (ImageButton) v ;
ListView listView0=(ListView)findViewById(R.id.listView0);
Toast.makeText(getApplicationContext(),"Deleting app : " + listView0.getPositionForView(v),Toast.LENGTH_LONG).show();
iB.setVisibility(View.GONE);
}
});
Toast.makeText(getApplicationContext(),"Long Clicked on app : " + tv.getText(),Toast.LENGTH_LONG).show();
return true;
}
});
}
else {
holder = (ViewHolder) convertView.getTag();
}

Appreciation currentApp = appList.get(position);
holder.text.setText(currentApp.getValue());
holder.button.setTag(currentApp);

return convertView;

}

我的问题:当我长按一个项目时,删除按钮出现在另一个项目上......

最佳答案

由于您想要的 View 的 ID 在您的列表中多次出现,因此您需要确保获得具有该 ID 的 View 与您的 TextView 出现在同一列表项中。

如果你改变

ImageButton editButton = (ImageButton) findViewById(R.id.editButton);

ImageButton editButton = (ImageButton) ((ViewGroup) v.getParent()).findViewById(R.id.editButton);

这只会在您的 TextView 的父级 ViewGroup 中搜索,因此会找到 R.id.editButton 的正确实例。

更新

或者,你可以改变

ViewHolder holder = null;

final ViewHolder holder;

然后您根本不需要变量 editButton,因为您可以将代码更改为

holder.button.setVisibility(View.VISIBLE);

并且还在 holder.button 而不是 editButton 上调用 setOnClickListener。我还将调用移到 onLongClick 方法之外的 setOnClickListener

关于java - longclick时, ListView 中的删除按钮项目出现在另一个位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25309389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com