【发布时间】:2021-11-07 15:36:50
【问题描述】:
主要活动:
TextView tvDescription;
ArrayList<String> descriptions;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvDescription = (TextView)findViewById(R.id.tvDescription);
descriptions = new ArrayList<>();
descriptions.add("Description for item 1");
descriptions.add("Description for item 2");
descriptions.add("Description for item 3");
}
@Override
public void onItemSelected(int index) {
tvDescription.setText(descriptions.get(index));
}
}
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/listFrag"
android:name="com.example.fragmentsvideo2018.ListFrag"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
tools:layout="@layout/fragment_list" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/detailFrag"
android:name="com.example.fragmentsvideo2018.DetailFrag"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2"
tools:layout="@layout/fragment_detail" />
</LinearLayout>
列表片段:
ItemSelected activity;
public interface ItemSelected
{
void onItemSelected (int index);
}
public ListFrag() {
// Required empty public constructor
}
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
activity = (ItemSelected) context;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ArrayList<String> data = new ArrayList<String>();
data.add("1.This is item 1");
data.add("2.This is item 2");
data.add("3.This is item 3");
setListAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, data));
activity.onItemSelected(0);
}
@Override
public void onListItemClick(@NonNull ListView l, @NonNull View v, int position, long id) {
activity.onItemSelected(position);
}
}
fragment_list.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ListFrag">
<ListView
android:id="@+id/lvLIst"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
Detail Frag:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_detail, container, false);
}
}
fragment_deal.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/design_default_color_primary"
android:orientation="vertical"
tools:context=".DetailFrag">
<TextView
android:id="@+id/tvDescription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:layout_marginRight="20dp"
android:text="@string/textview"
android:textColor="#FFFFFF"
android:textSize="18sp" />
</LinearLayout>
错误:
2021-09-11 16:27:03.357 29251-29251/com.example.fragmentsvideo2018 E/AndroidRuntime: 致命异常: main 进程:com.example.fragmentsvideo2018,PID:29251 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.TextView.setText(java.lang.CharSequence)” 在 com.example.fragmentsvideo2018.MainActivity.onItemSelected(MainActivity.java:30) 在 com.example.fragmentsvideo2018.ListFrag.onActivityCreated(ListFrag.java:52) 在 androidx.fragment.app.Fragment.performActivityCreated(Fragment.java:2996) 在 androidx.fragment.app.FragmentStateManager.activityCreated(FragmentStateManager.java:580) 在 androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:285) 在 androidx.fragment.app.FragmentStore.moveToExpectedState(FragmentStore.java:112) 在 androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1647) 在 androidx.fragment.app.FragmentManager.dispatchStateChange(FragmentManager.java:3128) 在 androidx.fragment.app.FragmentManager.dispatchActivityCreated(FragmentManager.java:3072) 在 androidx.fragment.app.FragmentController.dispatchActivityCreated(FragmentController.java:251) 在 androidx.fragment.app.FragmentActivity.onStart(FragmentActivity.java:502) 在 androidx.appcompat.app.AppCompatActivity.onStart(AppCompatActivity.java:246) 在 android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1435) 在 android.app.Activity.performStart(Activity.java:8024) 在 android.app.ActivityThread.handleStartActivity(ActivityThread.java:3475) 在 android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) 在 android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201) 在 android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
我尝试在此站点和其他站点中进行搜索,但没有找到解决方案。 也许我做错了什么,因为我只是一个初学者。 请帮帮我!!
【问题讨论】: