2014-03-19 39 views
0

我想知道如何獲取項目已被刪除的位置。我使用了gridview來列出圖像。如何獲得一個項目在GridView中的位置

我的XML代碼:

<RelativeLayout xmlns:android="..." 
    xmlns:tools="..." 
    android:id="@+id/parent_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <GridView 
     android:id="@+id/grid_view" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:horizontalSpacing="10dip" 
     android:numColumns="4" 
     android:verticalSpacing="10dip" /> 

</RelativeLayout> 

這裏是我的MainActivity類別:

public class MainActivity extends Activity implements OnDragListener, 
     OnItemLongClickListener { 

    ArrayList drawables; 

    GridView gridView; 
    private BaseAdapter adapter; 
    private int draggedIndex = -1; 
    private int droppedIndex = -1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     drawables = new ArrayList(); 
     drawables.add(R.drawable.ic_launcher); 
     drawables.add(R.drawable.ic_launcher); 
     drawables.add(R.drawable.ic_launcher); 
     drawables.add(R.drawable.ic_launcher); 
     drawables.add(R.drawable.ic_launcher); 
     drawables.add(R.drawable.ic_launcher); 
     drawables.add(R.drawable.ic_launcher); 
     drawables.add(R.drawable.ic_launcher); 
     gridView = (GridView) findViewById(R.id.grid_view); 
     gridView.setOnItemLongClickListener(MainActivity.this); 
     gridView.setAdapter(adapter = new BaseAdapter() { 

      @Override 
      // Get a View that displays the data at the specified position in 
      // the data set. 
      public View getView(int position, View convertView, 
        ViewGroup gridView) { 
       // try to reuse the views. 
       ImageView view = (ImageView) convertView; 
       // if convert view is null then create a new instance else reuse 
       // it 
       if (view == null) { 
        view = new ImageView(MainActivity.this); 
       } 
       view.setImageResource((Integer) drawables.get(position)); 
       view.setTag(String.valueOf(position)); 
       return view; 
      } 

      @Override 
      // Get the row id associated with the specified position in the 
      // list. 
      public long getItemId(int position) { 
       return position; 
      } 

      @Override 
      // Get the data item associated with the specified position in the 
      // data set. 
      public Object getItem(int position) { 
       return drawables.get(position); 
      } 

      @Override 
      // How many items are in the data set represented by this Adapter. 
      public int getCount() { 
       return drawables.size(); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onDrag(View view, DragEvent dragEvent) { 
     switch (dragEvent.getAction()) { 
     case DragEvent.ACTION_DRAG_STARTED: 
      // Ignore this event 
      return true; 
     case DragEvent.ACTION_DRAG_ENTERED: 
      // Ignore this event 
      return true; 
     case DragEvent.ACTION_DRAG_EXITED: 
      // Ignore this event 
      return true; 
     case DragEvent.ACTION_DRAG_LOCATION: 
      // Ignore this event 
      return true; 
     case DragEvent.ACTION_DROP: 
      // Dropped inside a new view 
      // get the position where the item is been dropped 

       adapter.notifyDataSetChanged(); 
     case DragEvent.ACTION_DRAG_ENDED: 
      view.setOnDragListener(null); 
      return true; 

     } 
     return false; 
    } 

    @Override 
    public boolean onItemLongClick(AdapterView gridView, View view, 
      int position, long row) { 
     ClipData.Item item = new ClipData.Item((String) view.getTag()); 
     ClipData clipData = new ClipData((CharSequence) view.getTag(), 
       new String[] { ClipDescription.MIMETYPE_TEXT_PLAIN }, item); 
     view.startDrag(clipData, new View.DragShadowBuilder(view), null, 0); 
     view.setVisibility(View.INVISIBLE); 
     draggedIndex = position; 
     return true; 
    } 
} 

我猜我能得到的位置時動作DragEvent.ACTION_DROP但我不能想出辦法獲得位置!

任何想法?

回答

0

使用getPositionForView(View view)來獲取當前拖動項目的位置。

+0

CASE DragEvent.ACTION_DROP:首先調用adapter.notifyDataSetChanged();然後final int position = gridView.getPositionForView((ImageView)v.getParent());如果(位置> = 0){ int id = gridView.getAdapter()。getItem(position); } – YasirSE

+0

這是什麼問題? – YasirSE

+0

嘗試用getPositionForView(ImageView)v)替換getPositionForView(ImageView)v.getParent())。 – YasirSE

相關問題