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