2016-08-29 7 views
0

私は直接私の第二の非において参照findViewbyID

.findViewbyId(R.id.mainView)

を参照することができたフラグメントクラスEchossStampFragmentを有しますフラグメントクラスEchossMainViewこのビューに対処し、その背景を変更したい。

どのように私はそうのようonInitSuccessでそれに対処することができます:EchossMainViewクラスで

public void onInitSuccess() { 
     // EchossStampActivity.setText("onInitSuccess"); 
     mainView.setBackgroundColor(Color.RED); 
    } 

EchossStampFragmentクラス

public class EchossStampFragment extends Fragment implements EchossStampInterface { 
    private static final String TAG = MainActivity.class.getSimpleName(); 
    View myView; 
    private SupportMapFragment mapFragment; 
    EchossMainView mainView = null; 
    static TextView textView = null; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     myView = inflater.inflate(R.layout.activity_echoss, container, false); 
     return myView; 
    } 

    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     mainView = (EchossMainView) getView().findViewById(R.id.mainView); 
     textView = (TextView) getView().findViewById(R.id.textView); 
     FragmentManager fm = getChildFragmentManager(); 

     // Display Initialization 

     DisplayMetrics metric = new DisplayMetrics(); 
     getActivity().getWindowManager().getDefaultDisplay().getMetrics(metric); 
     mainView.init(metric); 

     mainView.initEchossMainView(this); // this is where we are passing the current activity as interface 

     // Library Initialization for Stamp 
     mainView.echossPlatformInit(APIKEY, REGION, LANGUAGE, INDEX); 

    } 

EchossMainViewクラス

public class EchossMainView extends StampBaseView { 

    private EchossStampInterface mEchossStampInterface; 

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

    public EchossMainView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public EchossMainView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public void onInitSuccess() { 
     EchossStampActivity.setText("onInitSuccess"); 
     mainView.setBackgroundColor(Color.RED); 

    } 
    public void onInitError(String code, String message) { 
     EchossStampFragment.setText("onInitError - " + code + " " + message); 

    } 


    public void onStampSuccess(String stampResult) { 
     EchossStampFragment.setText("onStampSuccess - " + stampResult); 

    } 

    public void onStampError(String code, String message) { 
     EchossStampFragment.setText("onStampError - " + code + " " + message); 
    } 
} 
+0

EchossMainViewとStampBaseViewとは何ですか?それらが両方ともビューを拡張していると仮定すると、クラス内から 'setBackground()'を呼び出すことができます。テキストをテキストビュー内に設定する必要がある場合は、カスタムViewGroupなどを作成することをお勧めします。 – AdamMc331

+0

'StampBaseView'は外部の第三者のライブラリです。 私のXMLレイアウトで 'mainView'を扱う必要があります。私はフラグメントからこれを行うことはできますが、EchossMainViewから直接行うことはできません。 あなたが言ったことだけを行うと、XMLタグ 'mainView'の背景は変更されません。 Fragmentクラスのビューを 'EchossMainView'クラスに拡張するにはどうしたらいいですか? – Stefan

+0

私はあなたが必要とは思わない。あなたは私の答えを見ましたか?まだ試しましたか?私はそれがあなたのために働くと思う。 – AdamMc331

答えて

2

EchossMainViewは、最終的にビューから拡張しなければなりませんので、あなたはそのクラス自体からsetBackgroundを呼び出すことができます方法について

public void onInitSuccess() { 
    setBackgroundColor(Color.RED); 
} 

ドキュメントここ:https://developer.android.com/reference/android/view/View.html#setBackgroundColor(int)

+0

ありがとうございます。あなたの答えを正しいものとしてマークしてください。 別の注意点として、 'EchossStampFragment'クラスの' EchossMainView'クラスから 'onInitSuccess'メソッドを呼び出す方法を知っていますか? – Stefan

+0

パブリックメソッドの場合は、フラグメントクラスの中で 'mainView.onInitSuccess()'と言うことができます。 @Stefan – AdamMc331

+1

私はあなたの助けに感謝します!解決済み! – Stefan