2014-07-16 78 views
1

我想創建一個onDisimiss監聽到我的應用程序作爲現在這就是我安卓UnsupportedOperationException異常<String>

活動

public class listview_test extends Activity { 
ListView list; 
String[] web = { 
     "Google Plus", 
     "Twitter", 
     "Windows", 
} ; 
Integer[] imageId = { 
     R.drawable.ic_launcher, 
     R.drawable.icon, 
     R.drawable.ic_launcher, 
}; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.list_test); 
    final CustomList adapter = new 
      CustomList(listview_test.this, web, imageId); 
    list=(ListView)findViewById(R.id.list); 
    list.setAdapter(adapter); 
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
      Toast.makeText(listview_test.this, "You Clicked at " +web[+ position], Toast.LENGTH_SHORT).show(); 
     } 
    }); 
    SwipeDismissListViewTouchListener touchListener = 
      new SwipeDismissListViewTouchListener(
        list, 
        new SwipeDismissListViewTouchListener.DismissCallbacks() { 
         @Override 
         public boolean canDismiss(int position) { 
          return true; 
         } 

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

而且自定義適配器

public class CustomList extends ArrayAdapter<String>{ 
private final Activity context; 
private final String[] web; 
private final Integer[] imageId; 
public CustomList(Activity context, 
        String[] web, Integer[] imageId) { 
    super(context, R.layout.weather_item, web); 
    this.context = context; 
    this.web = web; 
    this.imageId = imageId; 
} 
@Override 
public View getView(int position, View view, ViewGroup parent) { 
    LayoutInflater inflater = context.getLayoutInflater(); 
    View rowView= inflater.inflate(R.layout.weather_item, null, true); 
    TextView txtTitle = (TextView) rowView.findViewById(R.id.city); 
    ImageView imageView = (ImageView) rowView.findViewById(R.id.info_image); 
    txtTitle.setText(web[position]); 
    imageView.setImageResource(imageId[position]); 
    return rowView; 
} 

由於某種原因,每當我滑動一個項目來解僱它時,強制關閉,並給我這個例外

java.lang.UnsupportedOperationException 

在這一行

adapter.remove(adapter.getItem(position)); 

回答

3
java.lang.UnsupportedOperationException 

被拋出時由陣列或不可修改List回一個Adapter。既然你不能改變它們的大小,刪除是不可能的。

相反,修改您的適配器,使其接受的一個List,而不是一個數組,並確保你通關的List是完全靈活的。

喜歡的東西

List <String> web = new ArrayList <String>(); 
web.add ("Google Plus"); 
web.add ("Twitter"); 
//etc. 

足以確保靈活的列表。

這意味着你的CustomList適配器還應該打電話到父類的構造也接受一個List,在這種情況下是

public ArrayAdapter (Context context, int resource, List<T> objects) 

欲瞭解更多信息,請參閱ArrayAdapter文檔。

+0

因此,而不是「ArrayAdapter」我應該使用ListAdapter? – user3068269

+1

@ user3068269否,'ListAdapter'是由'ArrayAdapter'實現的接口。繼續使用'ArrayAdapter',但改變'super'調用。 –

+1

工作!非常感謝! – user3068269

相關問題