2012-10-27 39 views
1

我有一個奇怪的問題,應該很簡單。我創建了自定義操作欄類,並將其放入了一些活動中。我懷疑我的自定義操作欄有方法「設置文本」和「setBackButtonVisible」。這些方法應該從我的操作欄所在的活動類中調用。重點是從我的活動類主體調用這些方法會導致錯誤。現在我被迫從我的操作欄注入按鈕/文本視圖到活動,所以我可以操縱它們。 (請注意,我正在使用RoboGuice 2.0)類,正如您在錯誤日誌中看到的那樣。無法從我的自定義佈局類中調用方法

編輯:我忘了提,我MainMenuActivity躺在的TabBar

動作條類:

public class CustomActionBar extends RelativeLayout{ 

    //View v; 

    @InjectView(R.id.action_back_button) 
    Button backButton; 

    @InjectView(R.id.action_bar_text) 
    TextView tv; 


    public CustomActionBar(Context context, AttributeSet attrs){ 
     super(context, attrs); 

     LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     /*v = */layoutInflater.inflate(R.layout.action_bar, this); 

    } 

    public CustomActionBar(Context context) { 
     super(context); 

     LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     /*v = */layoutInflater.inflate(R.layout.action_bar, this); 

    } 

    // Cannot invoke those methods from MainMenuActivity 
    public void setText(String text){ 
     tv.setText(text); 
    } 

    public void setBackButtonVisible(boolean set){ 
     // invoking this method in MainMenuActivity constructor will produce funny error 
     if(!set){ 
      backButton.setVisibility(View.GONE); 
     }else{ 
      backButton.setVisibility(View.VISIBLE); 
     } 
    } 
} 

活動類

@ContentView(R.layout.activity_main_menu) 
    public class MainMenuActivity extends RoboActivity { 

    @InjectView(R.id.action_back_button) 
    Button actionBackButton; 

    @InjectView(R.id.action_bar_text) 
    TextView actionBarText; 

    @InjectView(R.id.action_bar) 
    CustomActionBar actionBar; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     actionBackButton.setVisibility(View.GONE); 
     // Hardcoded title for actionbar 

     // This one works: actionBarText.setText("TEST"); 
     actionBar.setText("Main Menu"); 
    } 


    public void onBackButtonClick(View v){ 
     this.finish(); 
    } 

    } 

錯誤日誌

main java.lang.reflect.InvocationTargetException 
at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:507) 
    at roboguice.event.eventListener.ObserverMethodListener.onEvent(ObserverMethodListener.java:32) 
    at roboguice.event.EventManager.fire(EventManager.java:130) 
    at roboguice.activity.RoboActivity.onCreate(RoboActivity.java:80) 
    at com.activities.MainMenuActivity.onCreate(MainMenuActivity.java:31) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623) 
    at android.app.ActivityThread.startActivityNow(ActivityThread.java:1499) 
    at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127) 
    at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339) 
    at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:731) 
    at android.widget.TabHost.setCurrentTab(TabHost.java:403) 
    at android.widget.TabHost.addTab(TabHost.java:242) 
    at com.altiweb.explorius.activities.TabHostActivity.addTab(TabHostActivity.java:77) 
    at com.altiweb.explorius.activities.TabHostActivity.onCreate(TabHostActivity.java:33) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1623) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1675) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:121) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:943) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:130) 
    at android.app.ActivityThread.main(ActivityThread.java:3701) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:507) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624) 
    at dalvik.system.NativeStart.main(Native Method) 
    Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class com.custom.ActionBar 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:227) 
    at android.app.Activity.setContentView(Activity.java:1657) 
    at roboguice.inject.ContentViewListener.optionallySetContentView(ContentViewListener.java:21) 
    ... 29 more 

回答

1

確定。 。 我知道了。

這是我的糟糕的錯誤。

什麼是錯的?我調用我的自定義動作條由

@InjectView(R.id.action_bar) 
CustomActionBar actionBar; 

的一點是,R.id.action_bar不動作欄ID ......這是我的主其他動作佈局ID ...

+0

其實,幫我鑑定由bug也! –

相關問題