2013-04-07 1 views
1

내 앱에서 긴 클릭을 사용하려고하는데 컴파일 할 수 없습니다. 이전 질문의 예제를 보았지만 컴파일 할 수는 없습니다. 내 주요 활동은 다음과 같이 선언 다음에서 onCreate() 메소드에서내 ListView에서 LongCLicks를 활성화하는 방법?

import android.widget.AdapterView.OnItemLongClickListener; 
public class LinearLayoutDemo extends ListActivity implements OnClickListener, OnItemClickListener, OnItemLongClickListener { 

,이를 넣어 :

myLV1.setOnItemLongClickListener(new View.OnItemClickListener() { 
    @Override public boolean onLongClick(View v) { 
     Log.d(TAG, "setOnItemLongClickListener() called for myLV"); 
     return(true); 
    } 
}); 
:
getListView().setOnItemLongClickListener(this); 

그리고 내 ListView에 (하는 mylv)에 대한

, 내가 이런 짓을

위의 내용이 틀렸다고 생각하지만 이유를 모르겠습니다. 컴파일러 오류가

LinearLayoutDemo.java:45: com.commonsware.android.linearpct.LinearLayoutDemo is not abstract and does not override abstract method onItemLongClick(android.widget.AdapterView<?>,android.view.View,int,long) in android.widget.AdapterView.OnItemLongClickListener 
[javac] public class LinearLayoutDemo extends ListActivity implements OnClickListener, OnItemClickListener, OnItemLongClickListener { 

LinearLayoutDemo.java:287: cannot find symbol 
[javac] symbol : class OnItemLongClickListener 
[javac] location: class android.view.View 
[javac]   myLV1.setOnItemLongClickListener(new View.OnItemLongClickListener() { 
[javac]            ^

** * ** * ** * ** * *** UPDATE ** * ** 입니다 * ** * ** * ***

ListActivity 클래스 정의에서 OnItemLongClickListener가 제거되었습니다. 나는 또한이

getListView().setOnItemLongClickListener(this); 

제거있어 다음 (그 이유를 알 수없는) 나는이 코드를 추가하고 일 :

myLV1.setOnItemLongClickListener(new OnItemLongClickListener() { 
    public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) { 
     Log.d(TAG, "onItemLongClick() for LV1"); 
     return true; 
    } 
}); 

그것은 꽤 간단한 것, 그래서 그것을 고수하고있어, 누군가가 나에게 이렇게 말하면 안된다.

** ** * * ** * ** * EDIT * ** * ** * ** ** * **

좋아요, 긴 클릭이 작동했습니다. 무엇을 길게 클릭했는지 어떻게 알 수 있습니까? myLV1.getCheckedItemPosition()이 작동한다고 가정했으나 그렇지 않습니다.

신경 쓰지 마라. 그것은 onItemLongClick()의 ​​'position'매개 변수에있다.

답변

1

당신이 할 수있는 기본적으로 두 가지 :

  1. 당신이 구현되지 않았기 때문에 라인 getListView().setOnItemLongClickListener(this); 제거는/

    myLV1.setOnItemLongClickListener에서
  2. 당신이를 만들어야합니다 AdapterView.OnItemLongClickListener의 onItemLongClick 방법을 오버라이드 View가 아닌 ​​AdapterView.OnItemLongClickListener의 인스턴스입니다.

+0

나는 위의 두 가지를 시도했다. 나는 여전히 컴파일러 오류를 얻는다 : 추상이 아니며 onItemLongClick 추상 메서드를 재정의하지 않는다. 그게 무슨 뜻인지 모르겠다. 또한 오류가 발생합니다. 메서드는 수퍼 유형의 메서드를 재정의하거나 구현하지 않습니다. –

+0

컴파일러 오류로 인해 myLV1.setOnItemLongClickListener에 전달 된 AdapterView.OnItemLongClickListener의 새 인스턴스 안에 onItemLongClick을 구현해야한다고 나와 있습니다. – ararog

0

OnItemLongClickListener 당신이 긴 클릭하면 ListView에-항목에 컨텍스트 메뉴를 만드시겠습니까?

이렇게하려면 가장 쉬운 방법은 onCreate- 방법 안에 registerForContextMenu(findViewById(android.R.id.list));을 사용하는 것입니다.

그런 다음 당신이 그렇게 같은 방법 onCreateContextMenuonContextItemSelected 오버라이드 (override) 할 필요가 :

을 인, onCreateContextMenu

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.my_context_layout, menu); 
} 

는 practicly을 설정하는 것입니다 당신이 여기서 뭐하는

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 

    switch (item.getItemId()) { 
     case R.id.my_item1: 
      doSomething(); 
      return true; 
     case R.id.my_item2: 
      doSomething(); 
      return true; 
     default: 
      return super.onContextItemSelected(item); 
    } 
} 
+0

ListView-Item을 길게 클릭 할 때 나타나는 컨텍스트 메뉴의 차이점을 모르겠습니다.ListView가 있고 항목을 길게 누르면 일부 Java 코드를 실행하는 콜백을 만들고 싶습니다. 현재,이 자바 코드는 간단한 Log.d() 호출이 될 수 있습니다. –

+0

좋아, 그럼 내 대답은 당신이 찾고있는 것이 아닙니다. 내 대답은 "편집"또는 "삭제"와 같은 선택 가능한 메뉴를 긴 클릭에서 제공하지만 달성하고자하는 것은 아닙니다. Emil Adz의 솔루션을 사용하는 것이 좋습니다. 왜냐하면 그는 구현되지 않은 메서드를 추가 할 것을 지시하기 때문입니다! – chuky

2

을 onContextItemSelected onLongClickListene 두 번 R : 여기에

1getListView().setOnItemLongClickListener(this);

당신은이 onLongClickListener 인터페이스를 구현으로 리스너가되도록 Activity을 설정합니다.

myLV1.setOnItemLongClickListener(new View.OnItemClickListener() {....

다음은 새 onItemClickListener을 만들고 목록에 다시 적용하려고하는

2. 이 부분을 활동 코드에서 제거하십시오.

및 구현되지 않은 방법을 추가하면 활동이 오랜 클릭의 경우에는 행동이 무엇인지를 지정할 수 있습니다이 방법 onLongClickListener

을 구현하는 시도로

onLongClick 즉시 당신의 Activity에 있어야합니다.

UPDATE : enter image description here

  1. 오른쪽 오류를 클릭합니다.

  2. 구현되지 않은 메서드를 추가하십시오.

이 클래스에 당신이 코드를 추가합니다 :

@Override 
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, 
     long arg3) { 
    // TODO Auto-generated method stub 
    return false; 
} 

을가 긴 클릭에 대한 작업을 정의합니다.

+0

어떤 항목을 LongClicked했는지 어떻게 알 수 있습니까? myLV1.getCheckedItemPosition()이 내게 알려주지 않습니다. –

+0

신경 쓰지 마라. onItemLongClick()의 ​​'position'매개 변수에있다. –

+0

onLongClickListener를 구현하도록 액티비티를 설정할 때이 액티비티 옆에 오류가 있음을 알게되면 오류를 클릭하면 재정의 메소드를 추가하라는 메시지가 표시됩니다. –

관련 문제