2014-02-14 3 views
0

을 길게 누르면 내 질문이 명확 해집니다. GridView가 ListView 항목에 중첩되어 있으며 원하는대로 ListView 항목을 드래그 앤 드롭하면됩니다.GridView

내가 싶습니다 : 을 - 다른 활동을 시작, 나는의 GridView 항목을 클릭 할 때 - 내가 ListView에 항목에 긴 클릭을 수행 할 때, ListView에 항목을 드래그 시작 - - 작품 그렇게 잘하지

하지만 미세 를 작동 드래그는 GridView 항목 사이가 아닌 GridView 항목을 길게 클릭 할 때만 시작됩니다. 그리드 열에 최대 4 개의 아이템을 가질 수 있다고 가정 해 봅시다. 그리드에는 5 개의 항목이 있으므로 2 개의 행이 있습니다. 첫 번째는 꽉 찼고 두 번째는 단 하나의 항목과 공백 (사용되지 않은) 공간 만 있습니다. 이 빈 공간을 길게 눌러 드래그하면 작동하지 않습니다. 어떤 충고?

답변

0

GridView 항목의 짧은 클릭 및 긴 클릭에 대해 다른 상황에 맞는 메뉴를 표시하고 싶습니다.

먼저 기본 동작은 긴 클릭에 대한 상황에 맞는 메뉴를 자동으로 표시하므로 짧은 클릭에 대한 수신기를 설정해야합니다.

다음으로 OnItemClickListener에서 부울 플래그를 true로 설정하십시오. 긴 클릭에 대한 기본값은 false입니다.

마지막으로 onCreateContextMenu()에서 짧은 클릭인지 확인하고 다른 컨텍스트 메뉴 (표준)를 표시하고 플래그를 false로 설정하십시오. 그렇지 않으면 기본 컨텍스트 메뉴 (옵션)가 표시됩니다.

다음은 아이디어를 보여주는 코드입니다.

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]); 
     } 
    } 
} 

또는 u는이 일을 완전히 onItemLongClick 리스너를 제거하고 단지 onContextItemSelected()

+1

답변을 주셔서 감사합니다,하지만 난 생각하지 않는다 선택된 셀을 얻기 위해 다음 코드를 사용 할 수 있습니다 이것은 내 문제에 대한 해결책이다. 컨텍스트 메뉴를 표시하고 싶지 않습니다. – untosabla