use of multiple <include /> tags in layout with ButterKnife

对着背影说爱祢 提交于 2019-12-01 03:50:40

you could use some type of sub-container like this:

public static class SettingsArcLayout {
  @InjectView(R.id.settings_text) public TextView mEcoText;
  @InjectView(R.id.settings_leaf_img) public ImageView mComfortLeaf;
  // etc...
}

then you have it

SettingsArcLayout layout1 = new SettingsArcLayout();
SettingsArcLayout layout2 = new SettingsArcLayout();

and then:

ButterKnife.inject(this); // inject eco and cmf
ButterKnife.inject(layout1, eco);
ButterKnife.inject(layout2, cmf);

and throught this class you can use:

layout1.mEcoText.setText(... etc

The idea of my answer is the same as Budius proposed, I found it in a related issue on ButterKnife's github repo. Original Author is TomazMartins

The MainActivity:

public MainActivity extends AppCompatActivity {
    // 1. First, we declare the layout that was included as a View objects.
    @BindView(R.id.layout_1) View layout_1;
    @BindView(R.id.layout_2) View layout_2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 2. In here, we bind the included layouts
        ButterKnife.bind(this);

        // 4. Then, we create objects of the type of the IncludedLayout.
        //      In this example the layout reuse the same layout twice, so, there are two
        //      IncludedLayouts.
        IncludedLayout includedLayout_1 = new IncludedLayout();
        IncludedLayout includedLayout_2 = new IncludedLayout();

        // 5. We bind the elements of the included layouts.
        ButerKnife.bind(includedLayout_1, layout_1);
        ButerKnife.bind(includedLayout_2, layout_2);

        // 6. And, finally, we use them.
        includedLayout_1.displayed_text.setText("Hello");
        includedLayout_2.displayed_text.setText("Hey!");
    }

    // 3. We create a static class that will be an container of the elements
    //     of the included layout. In here we declare the components that
    //     hold this. In this example, there is only one TextView.
    static class IncludedLayout {
        @BindView(R.id.displayed_text) TextView displayed_text;
    }
}

The XML of the MainAcitvity:

<!--...-->
<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <include android:id="@+id/layout_1" layout="@layout/included_layout" />
        <include android:id="@+id/layout_2" layout="@layout/included_layout" />
</LinearLayout>
<!--...-->

The XML of the Included Layout:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/displayed_text"/>
</LinearLayout>

That's it!

When i ran it, although the id was the same, because I reused it, the text in the TextView was different.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!