2014-12-30 46 views
0

我正在開發一個應用程序,其中使用自定義適配器進行自定義列表視圖。該適配器包含圖像視圖,文本視圖和其他視圖。我想要滑動列表項目以從列表中刪除它。我審閱鏈接如:Android:滑動以從列表視圖中刪除行

Ans having High vote

一行是什麼樣子。

enter image description here

1 =圖像視圖。

2 =文字視圖

刷卡正在工作,但並不平滑。當我滑動底部時間行刪除否則刷卡不正常工作。

請給我建議我缺少什麼或需要做什麼更改或添加或應用。

+0

檢查這個http://stackoverflow.com/questions/17857775/android-listview-row-delete-animation如果它可以幫助 – Raghunandan

+0

我能將動畫上刷卡,因爲它是在通知機器人。 –

回答

2
package com.example.android.swipedismiss; 

import android.app.ListActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.ListView; 
import android.widget.Toast; 

import java.util.ArrayList; 
import java.util.Arrays; 

public class MainActivity extends ListActivity { 
    ArrayAdapter<String> mAdapter; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // Set up ListView example 
     String[] items = new String[20]; 
     for (int i = 0; i < items.length; i++) { 
      items[i] = "Item " + (i + 1); 
     } 

     mAdapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, 
       android.R.id.text1, 
       new ArrayList<String>(Arrays.asList(items))); 
     setListAdapter(mAdapter); 

     ListView listView = getListView(); 
     // Create a ListView-specific touch listener. ListViews are given special treatment because 
     // by default they handle touches for their list items... i.e. they're in charge of drawing 
     // the pressed state (the list selector), handling list item clicks, etc. 
     SwipeDismissListViewTouchListener touchListener = 
       new SwipeDismissListViewTouchListener(
         listView, 
         new SwipeDismissListViewTouchListener.DismissCallbacks() { 
          @Override 
          public boolean canDismiss(int position) { 
           return true; 
          } 

          @Override 
          public void onDismiss(ListView listView, int[] reverseSortedPositions) { 
           for (int position : reverseSortedPositions) { 
            mAdapter.remove(mAdapter.getItem(position)); 
           } 
           mAdapter.notifyDataSetChanged(); 
          } 
         }); 
     listView.setOnTouchListener(touchListener); 
     // Setting this scroll listener is required to ensure that during ListView scrolling, 
     // we don't look for swipes. 
     listView.setOnScrollListener(touchListener.makeScrollListener()); 

     // Set up normal ViewGroup example 
     final ViewGroup dismissableContainer = (ViewGroup) findViewById(R.id.dismissable_container); 
     for (int i = 0; i < items.length; i++) { 
      final Button dismissableButton = new Button(this); 
      dismissableButton.setLayoutParams(new ViewGroup.LayoutParams(
        ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 
      dismissableButton.setText("Button " + (i + 1)); 
      dismissableButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Toast.makeText(MainActivity.this, 
          "Clicked " + ((Button) view).getText(), 
          Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      // Create a generic swipe-to-dismiss touch listener. 
      dismissableButton.setOnTouchListener(new SwipeDismissTouchListener(
        dismissableButton, 
        null, 
        new SwipeDismissTouchListener.DismissCallbacks() { 
         @Override 
         public boolean canDismiss(Object token) { 
          return true; 
         } 

         @Override 
         public void onDismiss(View view, Object token) { 
          dismissableContainer.removeView(dismissableButton); 
         } 
        })); 
      dismissableContainer.addView(dismissableButton); 
     } 
    } 

    @Override 
    protected void onListItemClick(ListView listView, View view, int position, long id) { 
     Toast.makeText(this, 
       "Clicked " + getListAdapter().getItem(position).toString(), 
       Toast.LENGTH_SHORT).show(); 
    } 
} 

full source code on githib and also tested