我想实现,显示在滑动按钮右侧的自定义列表视图。问题我现在面临现在的问题是,我实现了我在网上找到的onSwipeTouchListener。我可能能看到刷卡按钮。但它不是一致的,我的意思是,如果我右轻扫上的一排,按钮显示在其他一些列。这就是我想。
我创建了一个适配器,用于保存视图
// TransactionAddDropViewHolder
公共静态final类TransactionAddDropViewHolder {
公共查看moveUpButton = NULL;
公共查看moveDownButton = NULL;
公共查看withdrawButton = NULL;
公共查看reviewButton = NULL;
公共查看ApproveButton中= NULL;
公共查看rejectButton = NULL;
公众的LinearLayout addContainer = NULL;
公众的LinearLayout dropContainer = NULL;
公共无效swipeButtons(){
addDropListView.setOnTouchListener(新OnSwipeTouchListener(){
公共无效onSwipeRight(){
withdrawButton.setVisibility(View.VISIBLE);
}
公共无效onSwipeLeft(){
withdrawButton.setVisibility(View.INVISIBLE);
}
});
}
公共无效showUserButtons(){
this.moveUpButton.setVisibility(View.VISIBLE);
this.moveDownButton.setVisibility(View.VISIBLE);
// this.withdrawButton.setVisibility(View.VISIBLE);
}
公共无效hideUserButtons(){
this.moveUpButton.setVisibility(View.GONE);
this.moveDownButton.setVisibility(View.GONE);
// this.withdrawButton.setVisibility(View.GONE);
}
}
这是我的自定义视图我在哪里显示onSwipeButton
@覆盖
公共查看getView(最终诠释的立场,观点convertView,
ViewGroup中父){
最后TransactionAddDrop addDropData = this.addDropList.get(位置);
TransactionAddDropViewHolder支架=无效;
如果(convertView == NULL){
convertView = inflater.inflate(R.layout.fragment_pending_transaction_list_item,NULL);
持有人=新TransactionAddDropViewHolder();
holder.withdrawButton = convertView.findViewById(R.id.pendingTransactionItem_withdrawButton);
holder.addContainer =(的LinearLayout)convertView.findViewById(R.id.pendingTransactionItem_addContainer);
** holder.swipeButtons(); **
convertView.setTag(保持器);
} 其他 {
支架=(TransactionAddDropViewHolder)convertView.getTag();
holder.swipeButtons();
}
这是我OnSwipeTouchListener类
私人最后一类GestureListener扩展SimpleOnGestureListener {
私有静态最终诠释SWIPE_THRESHOLD = 100;
私有静态最终诠释SWIPE_VELOCITY_THRESHOLD = 100;
@覆盖
公共布尔onDown(MotionEvent E){
返回true;
}
@覆盖
公共布尔onFling(MotionEvent E1,E2 MotionEvent,浮velocityX,浮velocityY){
布尔结果= FALSE;
尝试 {
浮diffY = e2.getY() - e1.getY();
浮diffX = e2.getX() - e1.getX();
如果(Math.abs(diffX)> Math.abs(diffY)){
如果(Math.abs(diffX)> SWIPE_THRESHOLD和放大器;&安培; Math.abs(velocityX)> SWIPE_VELOCITY_THRESHOLD){
如果(diffX大于0){
onSwipeRight();
} 其他 {
onSwipeLeft();
}
}
} 其他 {
如果(Math.abs(diffY)> SWIPE_THRESHOLD和放大器;&安培; Math.abs(velocityY)> SWIPE_VELOCITY_THRESHOLD){
如果(diffY大于0){
onSwipeBottom();
} 其他 {
onSwipeTop();
}
}
}
}赶上(例外的例外){
exception.printStackTrace();
}
返回结果;
}
}
添加XML布局
< XML版本=1.0编码=UTF-8&GT?;
< LinearLayout中的xmlns:机器人=http://schemas.android.com/apk/res/android
的xmlns:程序=http://schemas.android.com/apk/res/com.cbssports.nflapp.ffb
机器人:layout_width =match_parent
机器人:layout_height =WRAP_CONTENT
机器人:ID =@ + ID / swipeRight
机器人:方向=垂直>
<的LinearLayout
机器人:ID =@ + ID / claimlayout
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:方向=横向>
<的LinearLayout
机器人:ID =@ + ID /索赔
机器人:layout_width =60dp
机器人:layout_height =WRAP_CONTENT
机器人:重力=中心
机器人:方向=垂直
机器人:填充=10dp>
< com.cbssports.nflapp.ffb.CustomText
机器人:ID =@ + ID / claimNumber
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:layout_centerVertical =真
机器人:文本=1
机器人:文字颜色=#B4B4B5
机器人:TEXTSIZE =36dp
应用程序:字体=oswald_regular/>
< / LinearLayout中>
< RelativeLayout的
机器人:ID =@ + ID / pendingPlayers
机器人:layout_width =200dp
机器人:layout_height =WRAP_CONTENT>
<的LinearLayout
机器人:ID =@ + ID / tradeDate
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:layout_alignParentTop =真
机器人:方向=横向
机器人:layout_toRightOf =@ + ID / claimlayout
机器人:paddingTop =5DP>
< com.cbssports.nflapp.ffb.CustomText
机器人:ID =@ + ID / pendingTransactionItem_teamName
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:文字颜色=#B4B4B5
机器人:TEXTSIZE =9dp
应用程序:字体=oswald_regular/>
< com.cbssports.nflapp.ffb.CustomText
机器人:ID =@ + ID / pendingTransactionItem_bidAmount
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:后台=#797979
机器人:文本=
机器人:文字颜色=#FFFFFF
机器人:TEXTSIZE =9dp/>
< / LinearLayout中>
<的LinearLayout
机器人:ID =@ + ID / adddropView
机器人:layout_width =match_parent
机器人:layout_height =WRAP_CONTENT
机器人:layout_below =@ + ID / tradeDate
机器人:layout_toRightOf =@ + ID / claimlayout
机器人:方向=垂直>
<的LinearLayout
机器人:ID =@ + ID / addViewContainer
机器人:layout_width =match_parent
机器人:layout_height =WRAP_CONTENT
机器人:方向=横向>
< com.cbssports.nflapp.ffb.CustomText
机器人:layout_width =50dp
机器人:layout_height =WRAP_CONTENT
机器人:paddingRight =10dp
机器人:文本=ADD
机器人:文字颜色=#797979
机器人:TEXTSIZE =15dp
应用程序:字体=oswald_regular/>
<的LinearLayout
机器人:ID =@ + ID / pendingTransactionItem_addContainer
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:方向=垂直/>
< / LinearLayout中>
<的LinearLayout
机器人:ID =@ + ID / adddropViewContainer
机器人:layout_width =match_parent
机器人:layout_height =WRAP_CONTENT
机器人:layout_toRightOf =@ + ID / claimlayout
机器人:方向=横向>
< com.cbssports.nflapp.ffb.CustomText
机器人:layout_width =50dp
机器人:layout_height =WRAP_CONTENT
机器人:paddingRight =10dp
机器人:文本=DROP
机器人:文字颜色=#797979
机器人:TEXTSIZE =15dp
应用程序:字体=oswald_regular/>
<的LinearLayout
机器人:ID =@ + ID / pendingTransactionItem_dropContainer
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:方向=垂直/>
< / LinearLayout中>
< / LinearLayout中>
< / RelativeLayout的>
<的LinearLayout
机器人:ID =@ + ID / pendingTransactionItem_userButtonContainer
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:layout_alignParentRight =真
机器人:layout_gravity =center_vertical
机器人:layout_toRightOf =@ + ID / pendingPlayers
机器人:重力=中心
机器人:方向=垂直>
<的LinearLayout
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:layout_alignParentRight =真
机器人:layout_gravity =center_vertical
机器人:重力=中心
机器人:方向=横向>
<按钮
机器人:ID =@ + ID / pendingTransactionItem_moveUpButton
机器人:layout_width =20dp
机器人:layout_height =15dp
机器人:layout_margin =3DP
机器人:背景=@可绘制/ gfx_up_arrow
机器人:填充=1DP
机器人:文字颜色=#FFFFFF
机器人:TEXTSIZE =7SP
机器人:能见度=看见/>
<按钮
机器人:ID =@ + ID / pendingTransactionItem_moveDownButton
机器人:layout_width =20dp
机器人:layout_height =15dp
机器人:layout_margin =3DP
机器人:背景=@可绘制/ gfx_down_arrow
机器人:填充=1DP
机器人:文字颜色=#FFFFFF
机器人:TEXTSIZE =7SP
机器人:能见度=看见/>
< / LinearLayout中>
< ImageView的
机器人:ID =@ + ID / pendingTransactionItem_withdrawButton
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:填充=1DP
机器人:SRC =@可绘制/ ic_cancelclaim
机器人:能见度=水涨船高/>
<! - 交易回顾 - >
< ImageView的
机器人:ID =@ + ID / pendingTransactionItem_reviewButton
机器人:layout_width =38dp
机器人:layout_height =38dp
机器人:填充=1DP
机器人:SRC =@可绘制/ btn_review
机器人:能见度=水涨船高/>
< / LinearLayout中>
< / LinearLayout中>
添加一个问题。获得的视图的总数的计数。但要在不同的布局来显示。这是我的onCreatedView
公开查看onCreateView(LayoutInflater充气,容器的ViewGroup,
捆绑savedInstanceState){
fragmentPendingTrades = inflater.inflate(R.layout.fragment_transactions_pending,集装箱,假);
pendingTradesView =充气;
返回fragmentPendingTrades;
}
公共无效onViewCreated(最终视图中查看,最终捆绑savedInstanceState){
this.addDropListView =(ListView控件)view.findViewById(R.id.transactions_pending_transactionsListView);
this.addDropAdapter =新TransactionAddDropAdapter(pendingTradesView);
this.addDropListView.setAdapter(this.addDropAdapter);
this.emptyTransationsContainer = view.findViewById(R.id.transactions_pending_transactions_emptyContainer);
TextView的getTotalCount =(TextView中)view.findViewById(R.id.transactions_pending_TransactionsAddDropCount);
getTotalCount.setText(+ addDropListView.getCount());
}
解决方案
那么,这是可以做到2种方式,因为我看到它:
收听到整个列表上刷卡,找出哪一行的刷卡发生,并显示/隐藏正确的行按钮。 听每一行上刷卡,并显示/隐藏该行的按钮。现在你所设置列表中的听众,但尝试应用显示/隐藏连接适配器中的按钮。从某种意义上说,你正在做的各占一半解决方案。有你有什么,我建议你去与选项#2。
在你的 TransactionAddDropViewHolder
,你需要获得一个参考的行布局根查看
,所以我们可以设置 OnSwipeTouchListener
吧。
公共静态final类TransactionAddDropViewHolder {
公共查看rootView = NULL;
//你其他code
公共无效swipeButtons(){
rootView.setOnTouchListener(新OnSwipeTouchListener(){
公共无效onSwipeRight(){
withdrawButton.setVisibility(View.VISIBLE);
}
公共无效onSwipeLeft(){
withdrawButton.setVisibility(View.INVISIBLE);
}
});
}
//你其他code
}
接下来,在你的 getView
方法,更新让你的 TransactionAddDropViewHolder
获取一个根查看
的布局。
@覆盖
公共查看getView(最终诠释的立场,观点convertView,ViewGroup中父){
最后TransactionAddDrop addDropData = this.addDropList.get(位置);
TransactionAddDropViewHolder支架=无效;
如果(convertView == NULL){
convertView = inflater.inflate(R.layout.fragment_pending_transaction_list_item,NULL);
持有人=新TransactionAddDropViewHolder();
//获取一个引用的行布局根
holder.rootView = convertView.findViewById(R.id.swipeRight);
holder.withdrawButton = convertView.findViewById(R.id.pendingTransactionItem_withdrawButton);
holder.addContainer =(的LinearLayout)convertView.findViewById(R.id.pendingTransactionItem_addContainer);
holder.swipeButtons();
convertView.setTag(保持器);
} 其他 {
支架=(TransactionAddDropViewHolder)convertView.getTag();
holder.swipeButtons();
}
}
还有一个问题,你将有,该按钮会显示正确刷卡的时候,但如果用户继续滚动,它会出现在其他行。这是因为的ListView
循环利用行的查看
秒。我建议你做任何两件事情:
布尔
来存储你的数据对象,如果该行的模式,其中按钮可见, isDeleteShowing
为例。然后在你的onSwipe回调,将 isDeleteShowing
来真/假。最后,在你的 getView
,你展现的按钮有根据 isDeleteShowing
该数据行/隐藏。
希望这一切帮助。
I am trying to implement, show the button on swipe right in the custom list view. Problem i am facing right now is, i implemented the onSwipeTouchListener which i found online. I could able to see the swipe button. But its not consistent, i mean if i swipe right on one row, button is displaying in some other row. This is what i tried.
i created an adapter for holding the view
//TransactionAddDropViewHolder
public static final class TransactionAddDropViewHolder {
public View moveUpButton = null;
public View moveDownButton = null;
public View withdrawButton = null;
public View reviewButton = null;
public View approveButton = null;
public View rejectButton = null;
public LinearLayout addContainer = null;
public LinearLayout dropContainer = null;
public void swipeButtons() {
addDropListView.setOnTouchListener(new OnSwipeTouchListener() {
public void onSwipeRight() {
withdrawButton.setVisibility(View.VISIBLE);
}
public void onSwipeLeft() {
withdrawButton.setVisibility(View.INVISIBLE);
}
});
}
public void showUserButtons() {
this.moveUpButton.setVisibility(View.VISIBLE);
this.moveDownButton.setVisibility(View.VISIBLE);
// this.withdrawButton.setVisibility(View.VISIBLE);
}
public void hideUserButtons() {
this.moveUpButton.setVisibility(View.GONE);
this.moveDownButton.setVisibility(View.GONE);
// this.withdrawButton.setVisibility(View.GONE);
}
}
And this is my Custom View where i am displaying the onSwipeButton
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
final TransactionAddDrop addDropData = this.addDropList.get(position);
TransactionAddDropViewHolder holder = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.fragment_pending_transaction_list_item, null);
holder = new TransactionAddDropViewHolder();
holder.withdrawButton = convertView.findViewById(R.id.pendingTransactionItem_withdrawButton);
holder.addContainer = (LinearLayout) convertView.findViewById(R.id.pendingTransactionItem_addContainer);
**holder.swipeButtons();**
convertView.setTag(holder);
} else {
holder = (TransactionAddDropViewHolder) convertView.getTag();
holder.swipeButtons();
}
And this is my OnSwipeTouchListener Class
private final class GestureListener extends SimpleOnGestureListener {
private static final int SWIPE_THRESHOLD = 100;
private static final int SWIPE_VELOCITY_THRESHOLD = 100;
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
boolean result = false;
try {
float diffY = e2.getY() - e1.getY();
float diffX = e2.getX() - e1.getX();
if (Math.abs(diffX) > Math.abs(diffY)) {
if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
if (diffX > 0) {
onSwipeRight();
} else {
onSwipeLeft();
}
}
} else {
if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
if (diffY > 0) {
onSwipeBottom();
} else {
onSwipeTop();
}
}
}
} catch (Exception exception) {
exception.printStackTrace();
}
return result;
}
}
Adding the XML Layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.cbssports.nflapp.ffb"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/swipeRight"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/claimlayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<LinearLayout
android:id="@+id/claim"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
android:padding="10dp" >
<com.cbssports.nflapp.ffb.CustomText
android:id="@+id/claimNumber"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="1"
android:textColor="#B4B4B5"
android:textSize="36dp"
app:typeface="oswald_regular" />
</LinearLayout>
<RelativeLayout
android:id="@+id/pendingPlayers"
android:layout_width="200dp"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/tradeDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:orientation="horizontal"
android:layout_toRightOf="@+id/claimlayout"
android:paddingTop="5dp" >
<com.cbssports.nflapp.ffb.CustomText
android:id="@+id/pendingTransactionItem_teamName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#B4B4B5"
android:textSize="9dp"
app:typeface="oswald_regular" />
<com.cbssports.nflapp.ffb.CustomText
android:id="@+id/pendingTransactionItem_bidAmount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#797979"
android:text=""
android:textColor="#ffffff"
android:textSize="9dp" />
</LinearLayout>
<LinearLayout
android:id="@+id/adddropView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tradeDate"
android:layout_toRightOf="@+id/claimlayout"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/addViewContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<com.cbssports.nflapp.ffb.CustomText
android:layout_width="50dp"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:text="ADD"
android:textColor="#797979"
android:textSize="15dp"
app:typeface="oswald_regular" />
<LinearLayout
android:id="@+id/pendingTransactionItem_addContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" />
</LinearLayout>
<LinearLayout
android:id="@+id/adddropViewContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/claimlayout"
android:orientation="horizontal" >
<com.cbssports.nflapp.ffb.CustomText
android:layout_width="50dp"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:text="DROP"
android:textColor="#797979"
android:textSize="15dp"
app:typeface="oswald_regular" />
<LinearLayout
android:id="@+id/pendingTransactionItem_dropContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
<LinearLayout
android:id="@+id/pendingTransactionItem_userButtonContainer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_gravity="center_vertical"
android:layout_toRightOf="@+id/pendingPlayers"
android:gravity="center"
android:orientation="vertical" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_gravity="center_vertical"
android:gravity="center"
android:orientation="horizontal" >
<Button
android:id="@+id/pendingTransactionItem_moveUpButton"
android:layout_width="20dp"
android:layout_height="15dp"
android:layout_margin="3dp"
android:background="@drawable/gfx_up_arrow"
android:padding="1dp"
android:textColor="#ffffff"
android:textSize="7sp"
android:visibility="visible" />
<Button
android:id="@+id/pendingTransactionItem_moveDownButton"
android:layout_width="20dp"
android:layout_height="15dp"
android:layout_margin="3dp"
android:background="@drawable/gfx_down_arrow"
android:padding="1dp"
android:textColor="#ffffff"
android:textSize="7sp"
android:visibility="visible" />
</LinearLayout>
<ImageView
android:id="@+id/pendingTransactionItem_withdrawButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="1dp"
android:src="@drawable/ic_cancelclaim"
android:visibility="gone" />
<!-- Transaction Review -->
<ImageView
android:id="@+id/pendingTransactionItem_reviewButton"
android:layout_width="38dp"
android:layout_height="38dp"
android:padding="1dp"
android:src="@drawable/btn_review"
android:visibility="gone" />
</LinearLayout>
</LinearLayout>
Adding one more question. getting the total Count of the view. But want to display in the different layout. Here is my onCreatedView
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
fragmentPendingTrades = inflater.inflate(R.layout.fragment_transactions_pending, container, false);
pendingTradesView = inflater;
return fragmentPendingTrades;
}
public void onViewCreated(final View view, final Bundle savedInstanceState) {
this.addDropListView = (ListView) view.findViewById(R.id.transactions_pending_transactionsListView);
this.addDropAdapter = new TransactionAddDropAdapter(pendingTradesView);
this.addDropListView.setAdapter(this.addDropAdapter);
this.emptyTransationsContainer = view.findViewById(R.id.transactions_pending_transactions_emptyContainer);
TextView getTotalCount = (TextView) view.findViewById(R.id.transactions_pending_TransactionsAddDropCount);
getTotalCount.setText(""+addDropListView.getCount());
}
解决方案
So, this can be done 2 ways as I see it:
Listen to swipes on the entire list, figure out which row the swiped occurred on, and show/hide the button for the correct row. Listen to swipes on each row, and show/hide the button for that row.Right now you are setting the listener on the list, but trying to apply show/hide the button attached in the adapter. In a way, you are doing half of each solution. With what you have, I suggest you go with option #2.
In your TransactionAddDropViewHolder
, you need to get a reference to the root View
in the row layout, so we can set the OnSwipeTouchListener
to it.
public static final class TransactionAddDropViewHolder {
public View rootView = null;
// Your other code
public void swipeButtons() {
rootView.setOnTouchListener(new OnSwipeTouchListener() {
public void onSwipeRight() {
withdrawButton.setVisibility(View.VISIBLE);
}
public void onSwipeLeft() {
withdrawButton.setVisibility(View.INVISIBLE);
}
});
}
// Your other code
}
Next, in your getView
method, update it so your TransactionAddDropViewHolder
gets a reference to the root View
in the layout.
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final TransactionAddDrop addDropData = this.addDropList.get(position);
TransactionAddDropViewHolder holder = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.fragment_pending_transaction_list_item, null);
holder = new TransactionAddDropViewHolder();
// Get a reference to the root of the row layout
holder.rootView = convertView.findViewById(R.id.swipeRight);
holder.withdrawButton = convertView.findViewById(R.id.pendingTransactionItem_withdrawButton);
holder.addContainer = (LinearLayout) convertView.findViewById(R.id.pendingTransactionItem_addContainer);
holder.swipeButtons();
convertView.setTag(holder);
} else {
holder = (TransactionAddDropViewHolder) convertView.getTag();
holder.swipeButtons();
}
}
There is one more issue you will have, the button will correctly show up when swiped, but if the user continues to scroll, it will appear on other rows. This is because ListView
recycles its row's View
s. I suggest you do either 2 things:
boolean
to store in your data object if the row is in the mode where the button is visible, isDeleteShowing
for example. Then in your onSwipe callbacks, you set isDeleteShowing
to true/false. Lastly, in your getView
, you show/hide of the button there depending on isDeleteShowing
for that data row.
Hope this all helps.