2013-02-28 13 views
0

我正在開發小型android應用程序,其中我創建了一個類abc,它擴展了LinearLayout和一個活動xyz。在我的ABC類我在下面的方式在android線性佈局類中實現接口android

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

} 

定義一個接口,現在我在TRED下列方式使用這個接口從我的活動。

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();。當我試圖讓acees它給我空指針例外。

我是否做錯了什麼。如何解決這個問題呢。 需要幫助... 謝謝...

回答

3

好吧我真的有點和你的代碼混淆。我會做這樣的事情。 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包我的自定義視圖在我的ABC類我會寫這樣的事情

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

最後,在您的活動XYZ

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 2013-02-28 10:29:15

+1

很高興我可以幫助:) – Giz 2013-02-28 10:51:15

0

根據您粘貼的代碼,您的活動需要爲您的abc類實現OnclickxitemListener以回調。從您的活動中刪除onclickxitem,實現OnclickxitemListener並讓IDE從界面實現未實現的onclickxitem方法。

調用cubes.initialiseImages();由於立方體尚未初始化,因此也會給你一個空指針。當然你想要調用widget.initialiseImages()?

您可以訪問listener1.nil字符串,因爲它已被聲明並給定值。

+0

hye嗨domji謝謝你的回覆....所以根據你的意見,我必須實現OnClickxitemListener爲abc類和我的xyz活動以及右?第二件事是我需要initialiseImages()方法becoz我需要傳遞一些參數像圖像數組。所以這就是爲什麼我使用的是......你可以解釋你的答案更多,以便我可以試試它......感謝您的幫助 – nilkash 2013-02-28 11:04:07

+0

您正在您的abc類中聲明OnclickxitemListener。爲了在你的xyz Activity中實現這個功能,你的聲明應該看起來像這樣public:「class xyz extends Activity implements OnclickxitemListener」。此外,您並未將視圖添加到xyz佈局,因此我不知道您的abc小部件將如何在您的xyz活動中顯示。如果您上傳您的項目並在此發佈鏈接,我可以爲您解決它,上傳併發送回鏈接。 – speedynomads 2013-02-28 12:12:23

+0

嗨Domji謝謝你的回覆..我給你你想說的。我按照你的說法實現了我的clickListener。關於你的第二個問題,我的小部件如何顯示到xyz活動中。我將它包含在我的xyz佈局文件,即main.xml中。所以它將我的佈局顯示到我的活動中。我根據GIZ的解決方案(上圖)解決了我的問題。感謝您的最終幫助... Thankx很多..如果您有任何有關自定義佈局的概念指南,請與我們分享,以便我們也瞭解它。 – nilkash 2013-02-28 12:25:13