2013-02-28 3 views
0

저는 LinearLayout과 하나의 액티비티 xyz를 확장하는 하나의 클래스 abc를 만든 작은 안드로이드 애플리케이션을 개발 중입니다. 내 수업 abc 내에서 다음과 같은 방식으로 하나의 인터페이스를 정의합니다.안드로이드 선형 레이아웃 클래스의 인터페이스 구현 안드로이드

public class abc extends LinearLayout { 


    private OnclickxitemListener listener1; 

    public interface OnclickxitemListener 
    { 
     public String nil = "nilkash"; 
     public void onclickxtitem(); 
    } 

    public void setOnxitemSelectedListener(OnclickxitemListener listener) 
    { 
     this.listener1 = listener; 
     Log.i("#######################################", "inside set listener "+listener1); 
    } 

    public abc(Context context) 
    { 
     super(context); 
    } 


    @SuppressWarnings("deprecation") 
    public void initialiseImages() 
    { 

     create custome linear view here 
     ImageView image_View = (ImageView) parentLayout.findViewById(0); 
     image_View.setOnClickListener(new OnClickListener() 
     { 
     @Override 
     public void onClick(View v) 
     { 
      String n = listener1.nil; 
      Log.i("#################################", "inside click"+n); 
      listener1.onclickxitem(); 
     } 
     }); 
    } 

} 

이제이 인터페이스를 내 활동에서 다음과 같은 방식으로 사용할 예정입니다.

public class xyz extends Activity implements abc.OnclickxitemListener{ 

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

    abc widget = new abc(this); 
    widget.setOnxitemSelectedListener(this); 

     cubes.initialiseImages(); 
    } 


    @Override 
    public void onclickxitem() { 

    } 

} 

이제 문제는 내가 내 수업에서 이미지를 클릭 리스너를 excuted 때이 변수 값 ("문자열 nilkash")에 액세스 할 수 있음을하지만 난이 방법 listener1.onclickxitem();에 액세스 할 수 없습니다입니다. 내가 그것이 null 포인터 예외를 제공 acees하려고했을 때.

내가 잘못하고 있는지 여부. 이 문제를 해결하는 방법. 도움이 필요합니다 ... 고마워요 ...

답변

3

좋아요. 나는 코드와 약간 혼동 스럽습니다. 나는 이런 것을 할 것입니다. ABC 내 ABC 클래스에서 내 활동 레이아웃 파일 xyz.xml

<com.test.abc 
android:id="@+id/myview" 
<!-- You can modify the values below the way you want --> 
android:layout_width="300dp" 
android:layout_height="300dp" 
android:layout_gravity="center" 
android:layout_centerHorizontal="true" 
android:layout_centerVertical="true"/> 

에서 패키지 com.test에서 내 사용자 정의보기를 경우 내가 활동의 XYZ에서 마지막으로이

public class abc extends ImageView{ 

    private OnclickxitemListener listener; 

    public interface OnclickxitemListener 
    { 
     public String nil = "nilkash"; 
     public void onclickxtitem(); 
    } 


    public void setOnxitemSelectedListener(OnclickxitemListener l) 
    { 
     listener = l; 

    } 

    public abc(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
     initialize(); 

    } 

    public void initialize() 
    { 

     this.setImageResource(R.drawable.*name of the image saved in drawable*); 


     setOnClickListener(new OnClickListener() 
     { 

     @Override 
    public void onClick(View arg0) 
     { 
      // TODO Auto-generated method stub 
    notifyListener(); 
     } 

     }); 
    } 

    private void notifyListener() 
    { 
      if (null!=listener) 
      listener.onclickxtitem(); 
    } 
} 

처럼 작성할 수

public class xyz extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.xyz); 

     abc myview = (abc)findViewById(R.id.myview); 
     myview.setOnxitemSelectedListener(new abc.OnclickxitemListener() 
      { 
       @Override 
       public void onclickxtitem() 
       { 


       } 
       }); 

    } 


} 
+0

파티 시간 ... :) – nilkash

+1

기꺼이 도와 드리겠습니다. – Giz

0

붙여 넣은 코드에 따라, 귀하의 abc 클래스가 콜백을 위해 OnclickxitemListener를 구현해야합니다. 여러분의 액티비티에서 onclickxitem을 제거하고, OnclickxitemListener를 구현하고, IDE가 구현되지 않은 onclickxitem 메소드를 인터페이스에서 구현하도록하십시오.

cubes.initialiseImages() 호출 중. 또한 큐브가 초기화되지 않았으므로 null 포인터를 제공합니다. 반드시 widget.initialiseImages()를 호출하고 싶습니까?

이 값이 선언되고 값이 지정되면 listener1.nil 문자열에 액세스 할 수 있습니다.

+0

안녕하세요. 도미가 답장을 보내 주셔서 감사합니다 .... 그래서 의견에 따르면 저는 abcl 클래스와 내 xyz 활동을 위해 OnclickxitemListener를 구현해야합니다. ? 그리고 두 번째는 initialiseImages() 메소드가 필요하다는 것입니다. 이미지 배열과 같은 일부 매개 변수를 전달해야합니다. 그래서 내가 왜 그걸 사용하고 있는지 ... 당신이 그것을 시도해 볼 수 있도록 귀하의 ans 더 plz 수 plz ... 도와 주셔서 감사합니다 – nilkash

+0

당신은 abc 클래스에서 OnclickxitemListener를 선언하고 있습니다. 이것을 xyz 액티비티에 구현하려면 선언은 다음과 같이 공개되어야합니다. "class xyz extends Activity implements OnclickxitemListener". 또한 xyz 레이아웃에보기를 추가하지 않으므로 xyz 활동에 abc 위젯이 표시되는 방법을 모르겠습니다. 프로젝트를 업로드하고 여기에 링크를 게시하면 문제를 해결하고 업로드하고 링크를 다시 보낼 수 있습니다. – speedynomads

+0

안녕하세요. 돔지가 답장을 보내 주셔서 감사합니다. 내가 말한대로 clickListener를 구현했습니다. 그리고 두 번째 질문에 대해 어떻게하면 내 위젯이 xyz 활동으로 표시 될 수 있는지에 대해 설명합니다. 내 xyz 레이아웃 파일, 즉 main.xml에이 파일을 포함 시켰습니다. 그래서 내 활동에 내 레이아웃을 표시합니다. 위의 해결책에 따라 문제를 해결합니다 (위). 귀하의 궁극적 인 도움을 주셔서 감사합니다 ... Thankx 많이 .. 만약 당신이 사용자 정의 레이아웃에 대한 개념적인 지침이 있다면 우리도 그것에 대해 알게되도록 우리와 공유 할 수 있습니다 .. – nilkash

관련 문제