Próbuję odwołać się do kontroli rodzeństwa za pomocą XML.Jak powiązać jedną kontrolę z drugą podczas inflacji?
Aby zadeklarować atrybut odwołać identyfikator z MyTextView:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyTextView">
<attr name="valueTextViewId" format="reference" />
</declare-styleable>
</resources>
fragment_example.xml - Jak korzystać z niestandardowego atrybutu:
<!-- 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 - pompowania formanty
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// calls MyTextView Ctor
View v = inflater.inflate(R.layout.fragment_example, container, false);
}
MyTextView klasy konstruktor - Podczas inflacji zrobić coś z wymienionej 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
}
}
}
w tym przykładzie v
jest zawsze null
. Zakładam, że podczas Inflacji Układu kontrolki nie zostały jeszcze dodane. Inną rzeczą, na którą należy zwrócić uwagę, jest to, że jest to Fragment
, dlatego może to być powód, dla którego nie mogę znaleźć widoku w macierzystej aktywności.
Czy możliwe jest odwoływanie się do kontrolki z innego takiego?
To interesujące i początek. Jednak nie mam możliwości przekazania 'mActivity', gdy używam' LayoutInflator'. To sprawia, że zastanawiam się, czy atrybut kontekstu w Ctor jest samą czynnością ... –
To może być. sprawdź przez 'if (context instanceof Activity)', a następnie rzuć go w kontekst '' ((Activity)) ' – r2DoesInc
Być może nie wykonuj tej logiki w konstruktorze. Dodaj metodę do MyTextView dla 'setActivityValue (mActivity)', a następnie po wyraźnym ustawieniu działania, wykonaj swoją logikę ukrywania lub manipulowania innym tekstem jak tylko możesz. – r2DoesInc