2014-02-14 2 views
0

, чтобы сделать мой вопрос понятным - мой GridView вложен в элемент ListView, и все, что я хочу сделать, это сделать drag 'n' drop для элементов ListView.Длинный клик по GridView

Я хотел бы: - начать другую активность, когда я нажимаю на GridView элемента - работает отлично - начните перетаскивать элемент ListView, когда я выполнить длинный щелчок по пункту ListView - работает не так, мелкий

но перетаскивание начинается только тогда, когда я выполняю длинный щелчок по элементу GridView, а не между элементами GridView. Предположим, что я могу иметь максимум 4 элемента в строке сетки. Сетка содержит 5 элементов, поэтому она имеет 2 строки. Первый заполнен, а второй имеет только один элемент и пробел (не используется). Когда я хочу долго перетащить это пустое пространство, это не сработает. Любой совет?

ответ

0

Я понимаю, что вы хотите показать различные контекстные меню для коротких кликов и длительных кликов по элементу GridView.

Во-первых, вам просто нужно установить прослушиватель для короткого клика, поскольку по умолчанию поведение автоматически отображает контекстное меню при длительных щелчках.

Затем установите флажок Boolean в значение true в OnItemClickListener. Значение по умолчанию для длинных кликов - false.

Наконец, в onCreateContextMenu() проверьте, есть ли у него короткий клик и отобразите другое контекстное меню (стандартное) и установите флаг в false. Else позволяет отображать контекстное меню по умолчанию (опции).

Вот какой код для демонстрации идеи.

public class MainActivity extends Activity { 

    private static final String[] arr = {"A", "B", "C", "D", "E", "F", "G", "H","I"}; 

    private GridView mTGrid; 
    private boolean isShort; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mTGrid = (GridView) findViewById(R.id.gridView1); 
     registerForContextMenu(mTGrid); 

     mTGrid.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       isShort = true; 
       openContextMenu(view); 
      } 
     }); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.cell, arr); 
     mTGrid.setAdapter(adapter); 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
     AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; 

     if(isShort) { 
      getMenuInflater().inflate(R.menu.context_standard, menu); 
      menu.setHeaderTitle("Standard Menu for "+arr[info.position]); 
      isShort = false; 
     } 
     else { 
      getMenuInflater().inflate(R.menu.context_options, menu); 
      menu.setHeaderTitle("Options Menu for "+arr[info.position]); 
     } 
    } 
} 

Или и может сделать эту вещь полностью удалить onItemLongClick слушателя и просто использовать следующий код, чтобы получить выбранную ячейку в onContextItemSelected()

+1

Спасибо за ответ, но я не думаю, это решение моей проблемы. Я не хочу показывать контекстное меню. – untosabla

Смежные вопросы