2017-07-29 3 views
1

私は以下のようなJavaでのAndroidのダイアログの多くを作っ:Javaクラスフィールド(およびイベントハンドラーフィールド)がアンドロイドダイアログとカスタムビューで初期化されないのはなぜですか?

public class MyComponent extends LinearLayout { 

    // constructors that will call InitializeComponent after inflate layout 

    private View.OnClickListener PersistButton_OnClickListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      PersistRest(); 
     } 
    }; 

    private void PersistRest() { 
     int selectedIndex = RestTimePicker().getValue() - 1; 
     long selectedTimeSpan = predefinedDurationValues[selectedIndex]; 
     SecretaryManagerUtility.RegisterRestByDuration("", SecretaryManagerUtility.Me(), System.currentTimeMillis(), selectedTimeSpan); 
    } 

    @Override 
    protected void InitializeComponents() {  
     PersistButton().setOnClickListener(PersistButton_OnClickListener); 
     super.InitializeComponents(); 
    } 


    private Button m_PersistButton; 

    protected Button PersistButton(){ 
     if(m_PersistButton == null) 
      m_PersistButton = (Button)rootView.findViewById(R.id.PersistButton); 
     return m_PersistButton; 
    } 
} 

問題はPersistButton

ボタンをクリックするが、私はコードの下にonClickの割り当てを変更した場合、すべてが正常に動作した後に呼び出されることはありませんPersistButton_OnClickListener.onClick方法であり、

PersistButton().setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      PersistRest(); 
     } 
    }); 

なぜですか? この問題はアンドロイドのダイアログとアンドロイドのカスタムビューでのみ発生します

+0

FYI:JavaのPascalケーシングはコードを読みにくくします。 Javaの規約を守ってください。 – ChiefTwoPencils

答えて

0

私は答えを見つけましたが、間違った質問について私にお詫び申し上げます。 InitializeLayout()メソッドはコンストラクタで呼び出されます(私はxmlからビューオブジェクトを生成するためにカスタムツールを使用します)

問題は、javaフィールドがsuper()コンストラクタを呼び出す前に初期化されず、InitializeLayout )が呼び出されました

関連する問題