Android EditText和TextView中为空

Android EditText和TextView中为空,android,butterknife,Android,Butterknife,当我想将数据从列表传递到任何文本视图或编辑视图到片段时,我遇到了这个问题:尝试在空对象引用上调用虚拟方法“void android.widget.EditText.setText(java.lang.CharSequence)” 我正在使用Butterknife,这是在onCreateView中启动的。怎么了 片段中的方法: @Override public void itemData(int position, List<Task> tasks) { Task task

当我想将数据从列表传递到任何文本视图或编辑视图到片段时,我遇到了这个问题:尝试在空对象引用上调用虚拟方法“void android.widget.EditText.setText(java.lang.CharSequence)” 我正在使用Butterknife,这是在onCreateView中启动的。怎么了

片段中的方法:

@Override
public void itemData(int position, List<Task> tasks) {

    Task task = tasks.get(position);
    taskID = task.getId();
    String taskTexT = task.getDate();
    titleEdit.setText(task.getText());

    Log.d(TAG, "EDIT FRAGMENT " + position + task + taskTexT);

}
@BindView(R.id.time_edit) TextView timeEdit;
@BindView(R.id.date_edit) TextView dateEdit;
@BindView(R.id.title_edit) EditText titleEdit;
@BindView(R.id.save_edit_button) Button saveEditButton;
和XML文件:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/edit_fragment">

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:background="@color/colorPrimaryDark">

    <EditText
        android:id="@+id/title_edit"
        android:layout_width="330dp"
        android:layout_height="60dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="35dp"
        android:backgroundTint="#FFF"
        android:textColor="#FFF" />

    <TextView
        android:id="@+id/date_edit"
        android:layout_width="130dp"
        android:layout_height="40dp"
        android:layout_alignTop="@+id/and"
        android:layout_toStartOf="@+id/and"
        android:clickable="true"
        android:focusable="true"
        android:gravity="center"
        android:hint="Select date"
        android:textColor="#FFF"
        android:textColorHint="#FFF"
        android:textSize="18sp" />

    <View
        android:id="@+id/line"
        android:layout_width="320dp"
        android:layout_height="1dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="119dp"
        android:background="#FFF" />

    <TextView
        android:id="@+id/time_edit"
        android:layout_width="132dp"
        android:layout_height="40dp"
        android:layout_above="@+id/line"
        android:layout_toEndOf="@+id/and"
        android:clickable="true"
        android:focusable="true"
        android:gravity="center"
        android:hint="Select time"
        android:textAlignment="center"
        android:textColor="#FFF"
        android:textColorHint="#FFF"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/and"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_above="@+id/line"
        android:layout_centerHorizontal="true"
        android:gravity="center"
        android:text="and"
        android:textColor="#FFF"
        android:textSize="18sp" />

    <Button
        android:id="@+id/save_edit_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="36dp"
        android:text="EDIT"/>


</RelativeLayout>
主要活动:

public class MainActivity extends AppCompatActivity implements IRecyclerItemClickListener {

@Nullable
@BindView(R.id.floating_button) FloatingActionButton floatingButton;

RecyclerView recyclerView;
MainAdapter mainAdapter;
EditFragment editFragment = new EditFragment();

Realm realm;
RealmHelper realmHelper;
List<Task> tasks;
String taskID;

private static final String TAG = "MainActivity";


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

    ButterKnife.bind(this);

    recyclerView = findViewById(R.id.recycler_view);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);

    Realm.init(this);
    RealmConfiguration configuration = new RealmConfiguration
            .Builder()
            .deleteRealmIfMigrationNeeded()
            .build();
    realm = Realm.getInstance(configuration);

    realmHelper = new RealmHelper(realm);
    tasks = new ArrayList<>();
    tasks = realmHelper.getAllTasks();

    mainAdapter = new MainAdapter(tasks, this, new IRecyclerItemData() {
        @Override
        public void itemData(int position, List<Task> tasks) {
            editFragment.itemData(position, tasks);
        }
    });
    recyclerView.setAdapter(mainAdapter);
    recyclerView.setHasFixedSize(true);

}


@Optional
@OnClick(R.id.floating_button)
public void onClick() {
    android.app.Fragment fragment = new TaskFragment();

    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(R.id.main_activity, fragment);
    transaction.addToBackStack(null);
    transaction.commit();
}


public void showFloatingActionButton() {
    floatingButton.show();
}


public void hideFloatingActionButton() {
    floatingButton.hide();
}


@Override
public void onBackPressed() {
    super.onBackPressed();
    showFloatingActionButton();
    recyclerView.removeAllViews();
}


@Override
protected void onDestroy() {
    realm.close();
    super.onDestroy();
}


@Override
public void onDeleteClick(int position) {
        Task task = tasks.get(position);
        taskID = task.getId();
        if (taskID != null) {
            realmHelper.deleteTask(taskID);
            Log.d(TAG, "ON DELETE CLICK " + taskID);

            Toast.makeText(getApplicationContext(), "Task removed", Toast.LENGTH_LONG).show();
        }
}


@Override
public void onEditClick(int position) {
    Fragment fragment = new EditFragment();

    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(R.id.main_activity, fragment);
    transaction.addToBackStack(null);
    transaction.commit();
}
公共类MainActivity扩展AppCompative实现IRecyclerItemClickListener{
@可空
@BindView(R.id.floating_按钮)FloatingActionButton floatingButton;
回收视图回收视图;
主适配器主适配器;
EditFragment=新的EditFragment();
境界;
RealmHelper RealmHelper;
列出任务;
字符串taskID;
私有静态最终字符串TAG=“MainActivity”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
把(这个)绑起来;
recyclerView=findViewById(R.id.recycler\u视图);
RecyclerView.LayoutManager LayoutManager=新的LinearLayoutManager(此);
recyclerView.setLayoutManager(layoutManager);
Realm.init(this);
RealmConfiguration配置=新RealmConfiguration
.Builder()
.DeleteRealMifMigrationRequired()
.build();
realm=realm.getInstance(配置);
realmHelper=新realmHelper(领域);
tasks=newarraylist();
tasks=realmHelper.getAllTasks();
mainAdapter=新的mainAdapter(任务、此、新的IRecyclerItemData(){
@凌驾
公共void itemData(int位置,列出任务){
editFragment.itemData(位置、任务);
}
});
recyclerView.setAdapter(主适配器);
recyclerView.setHasFixedSize(true);
}
@可选的
@OnClick(R.id.floating\u按钮)
公共void onClick(){
android.app.Fragment Fragment=new TaskFragment();
FragmentTransaction=getFragmentManager().beginTransaction();
事务.替换(R.id.main_活动,片段);
transaction.addToBackStack(空);
commit();
}
public void showFloatingActionButton(){
floatingButton.show();
}
public void hideFloatingActionButton(){
floatingButton.hide();
}
@凌驾
public void onBackPressed(){
super.onBackPressed();
showFloatingActionButton();
RecycleView.RemoveAllView();
}
@凌驾
受保护的空onDestroy(){
realm.close();
super.ondestory();
}
@凌驾
公共位置单击(内部位置){
任务=任务。获取(位置);
taskID=task.getId();
if(taskID!=null){
realmHelper.deleteTask(任务ID);
Log.d(标记“删除时单击”+taskID);
Toast.makeText(getApplicationContext(),“任务已删除”,Toast.LENGTH_LONG.show();
}
}
@凌驾
public void onEditClick(int位置){
Fragment Fragment=新的EditFragment();
FragmentTransaction=getFragmentManager().beginTransaction();
事务.替换(R.id.main_活动,片段);
transaction.addToBackStack(空);
commit();
}

}

确保您正在呼叫ButterKnife.bind(此,视图)进行初始化

@BindView(R.id.time_edit)
TextView timeEdit;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.your_layout, container, false);
        ButterKnife.bind(this, view);
        return view;
    }

在片段中,调用
ButterKnife.bind(这个,视图)
onCreateView()中,就在返回
视图之前

@user9897182

有时,当我们的碎片已经被摧毁时,我们会得到结果

我建议您将代码包装为:

if(isAdded()&&!getActivity().isFinishing()){
//Todo add your code here
} 

确保您正在调用ButterKnife.bind(这个,视图);我在onCreateView中有此代码。您总是遇到此崩溃吗?@user9897182共享您的片段类。@rishabhsena是的,它仍然存在。我正在使用此代码。我在onCreateView中有此代码。我在itemData和app no crash中添加了此代码,但在edittext和TextView中没有看到任何内容。日志也是空的。我使用了debbuger和same-nothing@user9897182,所以很明显你的片段已经被销毁了。找出原因。您不能执行任何其他操作。调试“if()”语句我执行了该操作,方法获取位置和数据列表,但taskID为null。对话片段呢?这能解决问题吗?
@BindView(R.id.time_edit)
TextView timeEdit;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.your_layout, container, false);
        ButterKnife.bind(this, view);
        return view;
    }
if(isAdded()&&!getActivity().isFinishing()){
//Todo add your code here
}