Ich versuche, eine Geschwistersteuerung über XML zu referenzieren.Wie wird während des Aufpumpens auf ein anderes Steuerelement Bezug genommen?
ein Attribut zu deklarieren eine ID von MyTextView zu verweisen:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyTextView">
<attr name="valueTextViewId" format="reference" />
</declare-styleable>
</resources>
fragment_example.xml - Wie benutzerdefinierte Attribute verwenden:
<!-- Declare a "Title" text view that references a "Value" -->
<com.example.MyTextView
android:id="@+id/foo"
example:valueTextViewId="@id/bar"
... />
<!-- Depending on the "text" attribute of this "Value" textview -->
<!-- Do something within "Title" textview -->
<com.example.MyTextView android:id="@+id/bar" />
MyFragment.java - das Aufpumpen Kontrollen
MyTextView Klassenkonstruktors - Während die Inflation etwas mit referenzierten Textview:
public TextView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.MyTextView);
int refId = a.getResourceId(R.styleable.MyTextView_valueTextViewId);
// Updated to use context
if (refId > -1 && context instanceof Activity) {
Activity a = (Activity)context;
View v = a.findViewById(refId);
// THE PROBLEM: v is null
if (v != null) {
// In my case, I want to check if the "Value" textview
// is empty. If so I will set "this" textColor to gray
}
}
}
in diesem Beispiel v
ist immer null
. Ich nehme an, weil während der Layout-Inflation die Steuerelemente noch nicht hinzugefügt wurden. Eine andere Sache zu beachten ist, dass dies in einer ist, daher könnte das der Grund sein, warum ich die Ansicht in der übergeordneten Aktivität nicht finden kann.
Ist es möglich, ein Steuerelement von einem anderen so zu referenzieren?
Das ist interessant und ein Anfang. Ich habe jedoch nicht die Fähigkeit, "Mactivity" zu übergeben, wenn ich 'LayoutInflator' verwende. Das wundert mich ob das Kontextattribut im Ctor die Aktivität selbst ist ... –
kann es sein. check über 'if (context instanceof Activity)' und dann umwandeln '' ((Activity) context) ' – r2DoesInc
Vielleicht mach diese Logik nicht im Konstruktor. Fügen Sie MyTextView eine Methode für 'setActivityValue (mActivity)' hinzu und dann, nachdem die Aktivität explizit festgelegt wurde, führen Sie Ihre Logik des Verbergens oder Manipulierens der anderen Textansicht aus. – r2DoesInc