android Daten verbindlich. Wie der Zugriff über ID innerhalb eines layout enthalten

Habe ich ein layout beinhaltet einige Lay-Outs.
Einer von Ihnen habe eine progressBar und ich möchte den Zugriff auf Daten, die Bindung aber ich kann nicht.

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    >
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:splitMotionEvents="true"
        tools:context="jp.co.sakony.activities.DiaryNewArticleActivity"
        >

    <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            style="@style/ToolBar"
            />

    <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            >

        <ScrollView
                android:id="@+id/diary_new_article_scrollView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fillViewport="true"
                >

            <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginLeft="@dimen/margin_medium"
                    android:layout_marginRight="@dimen/margin_medium"
                    android:orientation="vertical"
                    android:splitMotionEvents="true"
                    >

                <jp.co.sakony.views.contents.InputFieldDescriptionView
                        android:id="@+id/diary_new_article_input_title_description"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="@dimen/margin_medium"
                        app:input_field_maxLength="@integer/diary_new_article_title_max_length"
                        app:input_field_required="true"
                        app:input_field_title="@string/diary_new_article_input_title"
                        />

                <android.support.design.widget.TextInputLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="-10dp"
                        app:counterEnabled="true"
                        app:counterMaxLength="@integer/diary_new_article_title_max_length"
                        app:counterTextAppearance="@style/counterText"
                        app:hintTextAppearance="@style/TextAppearence.App.TextInputLayout"
                        >
                    <jp.co.sakony.views.APEditText
                            android:id="@+id/diary_new_article_input_title"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:inputType="text"
                            android:maxLength="@integer/diary_new_article_title_max_length"
                            android:maxLines="1"
                            android:textCursorDrawable="@drawable/shape_edit_cursor_orange"
                            app:textLineColor="@color/orange"
                            />

                </android.support.design.widget.TextInputLayout>

                <jp.co.sakony.views.contents.InputFieldDescriptionView
                        android:id="@+id/diary_new_article_input_body_description"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="@dimen/margin_medium"
                        app:input_field_maxLength="@integer/diary_new_article_body_max_length"
                        app:input_field_required="true"
                        app:input_field_title="@string/diary_new_article_input_body"
                        />

                <android.support.design.widget.TextInputLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="-10dp"
                        app:counterEnabled="true"
                        app:counterMaxLength="@integer/diary_new_article_body_max_length"
                        app:counterTextAppearance="@style/counterText"
                        app:hintTextAppearance="@style/TextAppearence.App.TextInputLayout"
                        >
                    <jp.co.sakony.views.APEditText
                            android:id="@+id/diary_new_article_input_body"
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:maxLength="@integer/diary_new_article_body_max_length"
                            android:scrollbars="vertical"
                            android:textCursorDrawable="@drawable/shape_edit_cursor_orange"
                            app:textLineColor="@color/orange"
                            />

                </android.support.design.widget.TextInputLayout>

                <jp.co.sakony.views.contents.InputFieldDescriptionView
                        android:id="@+id/diary_new_article_input_allow_comment_description"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="@dimen/margin_medium"
                        app:input_field_explanation="@string/diary_new_article_input_allow_comment_explanation1"
                        app:input_field_required="true"
                        app:input_field_title="@string/diary_new_article_input_allow_comment"
                        />

                <android.support.v7.widget.SwitchCompat
                        android:id="@+id/diary_new_article_input_allow_comment"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="@dimen/margin_medium"
                        android:background="@drawable/selector_comment_reply_background"
                        android:checked="true"
                        android:padding="@dimen/margin_small"
                        android:text="@string/diary_new_article_allow_comment_switch_on"
                        android:textSize="@dimen/font_small"
                        android:theme="@style/AllowCommentSwitch"
                        />

            </LinearLayout>

        </ScrollView>

        <include layout="@layout/toolbar_shadow"/>

        <include
                layout="@layout/progress_bar_masked"
                android:id="@+id/progress"
                />

    </FrameLayout>

</LinearLayout>

progress_bar_masked.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout
        android:id="@+id/progressbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/transparent_grey"
        android:clickable="true"
        >

    <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            style="?android:attr/progressBarStyle"
            />

</RelativeLayout>

Aktivität

abstract public class BaseDiaryArticleActivity extends AppCompatActivity implements View.OnClickListener, TextWatcher,
    DialogOkCancelFragment.DialogOKCancellCallback {

protected ActivityBaseDiaryArticleBinding mBinding;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mBinding = DataBindingUtil.setContentView(this, R.layout.activity_base_diary_article);

    //can't find progressbar.
    mBinding.progress.progressbar
}

mBinding.Fortschritte Rückkehr Anzuzeigen.
aber ich denke, es sollte die Rückkehr ProgressBarMaskedBinding.

AKTUALISIERT

Ich dieses problem gelöst.

progress_bar_masked.xml in einem library-Projekt.
nun zog ich das layout in-app-Projekt und es funktioniert.
Vielleicht ist es ein databinding-Fehler ist es nicht?

  • warum versuchen Sie nicht findViewById() es kann sein getan mit es
  • Danke @MohamamdFatemi . Ich weiß findViewById() funktioniert. aber die Datenbindung kann ausschließen findViewById (), und man kann es vereinfachen, code. so Im refactoring von diesem code.
  • Es soll so arbeiten, sieht es Recht. Also, vielleicht müssen Sie Ihr Projekt neu erstellen. Oder die könnte das Problem sein.
  • Danke @tynn. Ich Baue mein Projekt viele Male. aber es funktioniert nicht. Ich finden erzeugt ProgressBarMaskedBinding.java. aber ActivityBaseDiaryArticleBinding kann nicht darauf zugreifen.
  • Immer noch die Frage, was bedeutet oder warum es da ist? Wenn es ein Teil Ihres Layouts sollten Sie es entfernen.
  • Ich bearbeitete codes. warum ich verwendet ~ da diese codes haben keine Beziehung zu dieser Frage.
  • Hast du vielleicht die id – progress für eine andere Ansicht in Ihrem layout?
  • Nein, ich habe nicht verwenden id-Fortschritt für jede Ansicht layouts.
  • Geben Fortschrittsbalken (nicht seine Eltern-layout) eine Id, keine id, die es garantiert nicht zum letzten Feld in der Bindung.
  • Ich aktualisiert meine Frage. Ich denke, vielleicht ist es ein bug. danke.

InformationsquelleAutor sakony | 2016-08-16



3 Replies
  1. 4

    Müssen Sie geben Sie Ihrem enthalten eine ID:

        <include android:id="@+id/toolShadow" layout="@layout/toolbar_shadow"/>

    Dann auf die Ansichten innerhalb der layout über die mitgelieferte Bindung:

    mBinding.toolShadow.progressbar.setProgress(100);
    • Danke @George. Ich möchte access-Ansichten in der progress_bar_masked.xml. und ich gab ID android:id=“@+id/Status“. du meinst, alle inklusive layout-Anforderungen-ID?
    • Ja. Das include-tag erzeugt eine verbindliche Feld (ProgressBarMaskedBinding in deinem Fall) in der äußeren Bindung-Klasse (ActivityBaseDiaryArticalBinding in Ihrem Fall). Wenn Sie geben Sie eine ID zu, die Bindungs-system machen es zu einem öffentlichen Bereich. Wenn Sie das nicht tun, es verwendet ein privates Feld und verwendet einen internen Namen für Sie. Sie können, zum Beispiel, enthalten, die das gleiche layout mehrmals in das gleiche layout, und Sie können auf diese Weise individuell.
    • Ich aktualisiert meine Frage. Ich denke, vielleicht ist es ein bug. danke.
    • haben Sie versuchen, kompilieren Sie das Projekt, wenn inklusive layout in der Bibliothek? Ich Frage mich, ob dies ist ein studio-Problem oder gradle-Frage. Auch haben Sie Datenbindung aktiviert in der mitgelieferten Bibliothek ?
    • ja, ich Baue mein Projekt viele Male. und Datenbindung aktiviert Bibliothek enthalten.
    • Ich habe gerade versucht dies in der integration-test-app. Funktioniert einwandfrei.
    • siehe Beispiel hier: gist.github.com/yigit/6e6071c0cc814fe1d077a24ad64856fe
    • FYI ich habe versucht, sowohl mit der Bibliothek als Modul in der app oder irgendeine Bibliothek, die aus einer externen maven-repository, in beiden Fällen funktionieren.

  2. 2

    Müssen Sie enthalten eine ID, und auch bei der Implementierung von data-binding in der Datei hinzufügen:
    <layout xmlns:android="http://schemas.android.com/apk/res/android">
    dann werden Sie in der Lage, access-Ansichten aus inklusive layout-Datei

  3. 2

    müssen Sie enthalten wrap Blick in layout tag

    <layout xmlns:android="http://schemas.android.com/apk/res/android">
    </layout>

    dann können Sie auf Sie zugreifen wie ActivityMainBinding.parentview.innerview;
    hoffe, es hilft jemand.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.