Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Butterknife与基本活动/子活动和MaterialDrawer一起使用_Java_Android_Android Activity_Butterknife_Materialdrawer - Fatal编程技术网

Java 将Butterknife与基本活动/子活动和MaterialDrawer一起使用

Java 将Butterknife与基本活动/子活动和MaterialDrawer一起使用,java,android,android-activity,butterknife,materialdrawer,Java,Android,Android Activity,Butterknife,Materialdrawer,我面临着使用多个活动(不使用片段)实现MaterialDrawer(库MikePenz)的问题,这些活动是通过BaseActivity实现的。另外,使用ButterKnife绑定视图 在SO中发现相关问题并逐一尝试,但在我的案例中,它不起作用,因为大多数人使用带有碎片的标准导航抽屉,或者它们与ButterKnife无关 代码: 主要活动类 public class MainActivity extends AppCompatActivity { @BindView(R.id.toolb

我面临着使用多个活动(不使用片段)实现MaterialDrawer(库MikePenz)的问题,这些活动是通过BaseActivity实现的。另外,使用ButterKnife绑定视图

在SO中发现相关问题并逐一尝试,但在我的案例中,它不起作用,因为大多数人使用带有碎片的标准导航抽屉,或者它们与ButterKnife无关

代码:

主要活动类

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.toolbar)
    Toolbar toolbar;

    private List<TestModel> destinations;
    private DestinationAdapter mAdapter;
    ProgressDialog progressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        setSupportActionBar(toolbar);
        navManagement();
    }
}
public类MainActivity扩展了AppCompatActivity{
@BindView(R.id.toolbar)
工具栏;
私人名单目的地;
私人目的地适应;
进行对话进行对话;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
把(这个)绑起来;
设置支持操作栏(工具栏);
导航管理();
}
}
活动单元主布局图

<android.support.constraint.ConstraintLayout 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"
    android:id="@+id/maincontainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.tvs.ui.MainActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        >

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay"
             />

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

</android.support.constraint.ConstraintLayout>

但是没有成功


非常感谢您的帮助。提前感谢。

MaterialDrawer
将为您的布局放大视图。默认情况下,它将在活动的根目录中添加一个
DrawerLayout
,并再次将其他内容(即主布局)作为子内容添加到其中

做出此决定是为了使在应用程序中实现
抽屉
变得超级简单,而无需更改任何特殊内容

Butterknife将在调用
bind
方法时绑定视图的。
调用
.build()
时,MaterialDrawer的所有视图都已绑定,但由于MaterialDrawer的视图是内部绑定的,因此您不必担心这些。

MaterialDrawer会将视图膨胀到布局中。默认情况下,它将在活动的根目录中添加一个
DrawerLayout
,并再次将其他内容(即主布局)作为子内容添加到其中

做出此决定是为了使在应用程序中实现
抽屉
变得超级简单,而无需更改任何特殊内容

Butterknife将在调用
bind
方法时绑定视图的。
调用
.build()
时,MaterialDrawer的所有视图都已绑定,但由于MaterialDrawer的视图是内部绑定的,因此您不必担心这些问题。

感谢@mikepenz的回复

发布它,因为它可能会帮助某人


通过在BaseActivity中创建一个抽象方法解决了这个问题

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getLayoutResourceId());

        ButterKnife.bind(this); 
        setSupportActionBar(toolbar);
        navManagement();

    }
    protected abstract int getLayoutResourceId();
具体活动

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_stores); not required
    ButterKnife.bind(this); 

    loadRecyclerView();
    testData();

}

@Override
protected int getLayoutResourceId() {
    return R.layout.activity_stores;
}

请注意,我没有在具体活动中使用ButterKnife.Bind,而是使用@null字段。但目前在基础和实施活动中都具有约束力。

感谢@mikepenz的回复

发布它,因为它可能会帮助某人


通过在BaseActivity中创建一个抽象方法解决了这个问题

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getLayoutResourceId());

        ButterKnife.bind(this); 
        setSupportActionBar(toolbar);
        navManagement();

    }
    protected abstract int getLayoutResourceId();
具体活动

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.activity_stores); not required
    ButterKnife.bind(this); 

    loadRecyclerView();
    testData();

}

@Override
protected int getLayoutResourceId() {
    return R.layout.activity_stores;
}

请注意,我没有在具体活动中使用ButterKnife.Bind,而是使用@null字段。但目前在基本活动和实现活动中都有绑定。

要完成@user2695433的回答,您可以做得更进一步:在基本活动中处理所有butterknife init并关闭,这样您就不会忘记释放资源!如果您的团队中有一些新开发人员不知道butterknife是如何工作的,这将非常有用。这是:

--------基本活动-------

-----在具体活动中------------


要完成@user2695433的回答,您可以再进一步:处理所有butterknife init并在BaseActivity中关闭,这样您就不会忘记释放资源!如果您的团队中有一些新开发人员不知道butterknife是如何工作的,这将非常有用。这是:

--------基本活动-------

-----在具体活动中------------



谢谢你的友好回复。根据我的代码,如果需要从BaseActivity中使用,请您建议我需要做什么?您没有真正提到问题所在:DOh抱歉,Mike。我在BaseActivity中使用MaterialDrawer,并从中继承了子活动(代码已发布),但抽屉未加载或崩溃如果我在单个活动中使用MaterialDrawer,它将加载,但如果我将MaterialDrawer代码移动到BaseActivity并继承到单个活动,它将不加载。我需要对setContentView做些什么?您可以发布baseActivity和扩展此baseActivity的活动中的代码吗?我想看看你是如何感谢你的好意。根据我的代码,如果需要从BaseActivity中使用,请您建议我需要做什么?您没有真正提到问题所在:DOh抱歉,Mike。我在BaseActivity中使用MaterialDrawer,并从中继承了子活动(代码已发布),但抽屉未加载或崩溃如果我在单个活动中使用MaterialDrawer,它将加载,但如果我将MaterialDrawer代码移动到BaseActivity并继承到单个活动,它将不加载。我需要对setContentView做些什么?您可以发布baseActivity和扩展此baseActivity的活动中的代码吗?我需要看看你是如何初始化抽屉的,这里声明了activity_main?@LOG_TAG请检查问题,activity_main布局以及代码都在那里。我在上面的代码BaseActivity中询问你在哪里声明了setContentView(getLayoutResourceId());由于您没有调用setContentView(R.layout.activity_main),所以从何处加载活动_main;在BaseActivity(上面的代码)中,是否有可用的完整工作要点?通过在BaseActivity中创建一个抽象方法解决了这个问题,但是您在其中声明了setContentView(R.layout.activity_main);在基本活动中?@LOG_TAG yes,通过在MainActivity受保护的抽象int getLayoutResourceId()中创建一个抽象方法;活动\u main在何处声明?@LOG\u标记请检查
protected Unbinder binder;
protected abstract int getLayoutResourceId();
...

  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(getLayoutResourceId());
        binder = ButterKnife.bind(this);
    }

@Override
protected void onDestroy() {
    super.onDestroy();
    binder.unbind(); //release ressource
}
@BindView(R.id.title)
    TextView title; // butterknife stuff

@Override
    protected int getLayoutResourceId() { //define which Id
        return R.layout.activity_main;
    }
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
  }