2016-08-29 1 views
0

J'ai une classe Fragment EchossStampFragment dans lequel je peux directement faire référence àRéférence findViewById de Fragment en classe non Fragment

.findViewbyId (R.id.mainView)

Dans mon second non classe de fragment EchossMainView Je veux aborder cette vue et modifier son arrière-plan.

Comment puis-je aborder dans onInitSuccess comme ceci:

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

dans la classe EchossMainView?

EchossStampFragment Classe

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 Classe

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

Qu'est-ce que EchossMainView et StampBaseView? En supposant qu'ils étendent tous deux une vue, vous pouvez appeler 'setBackground()' depuis la classe elle-même. Si vous devez définir le texte sur une vue de texte à l'intérieur, vous pouvez envisager de créer un ViewGroup personnalisé ou similaire. – AdamMc331

+0

'StampBaseView' est une bibliothèque externe tierce. Je dois adresser un 'mainView' dans ma mise en page xml. Je peux le faire depuis le fragment mais pas directement depuis EchossMainView. Si je fais juste ce que vous avez dit, l'arrière-plan de la balise xml 'mainView' ne changera pas. Comment puis-je étendre la vue de la classe Fragment à la classe EchossMainView? – Stefan

+0

Je ne pense pas que vous devez. Avez-vous vu ma réponse à cela, et avez-vous déjà essayé? Je soupçonne que cela fonctionnera pour vous. – AdamMc331

Répondre

2

Depuis EchossMainView doit éventuellement s'étendre de vue, vous pouvez appeler setBackground à partir de cette classe elle-même:

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

Docs pour la méthode ici: https://developer.android.com/reference/android/view/View.html#setBackgroundColor(int)

+0

Merci. Marqué votre réponse comme correcte. Sur une note différente, sauriez-vous comment appeler la méthode 'onInitSuccess' de la classe' EchossMainView' dans la classe 'EchossStampFragment'? – Stefan

+0

S'il s'agissait d'une méthode publique, vous pourriez juste dire 'mainView.onInitSuccess()' dans la classe fragment. @Stefan – AdamMc331

+1

J'apprécie votre aide! Résolu! – Stefan