Java 如何连接';它不在主布局中吗?
我正在android studio中完成我的第一个相当大的项目,在过去的三天里,我一直在努力: 我的应用程序有一个底部导航组件,可以打开另外3个片段,我想知道如何在这3个片段中实现ListView。我设法将ListView放在主布局(activity_main.xml)中,但一旦我将ListView放在非主布局的布局中,我就会得到一个NPE。我想这是因为如果我试图用findViewById(R.id.ListView)将ListView链接到它的数据,它会在activity_main中查找ListView。试图将ListView链接到布局文件中组件的代码写入mainActivity.java中的onCreate中。我如何告诉程序使用_List.xml在layout_中查找ListView 我读到另一个问题,我需要将onCreate中的setContentView(R.layout.activity_main)更改为setContentView(R.layout.layout_With_List),但这只会产生另一个错误 那么,如何才能正确地将ListView放入另一个片段中,以便在使用底部导航更改选项卡并使其显示数据时,它不会在主布局中浮动 我得到的错误是:Java 如何连接';它不在主布局中吗?,java,android,android-studio,android-layout,listview,Java,Android,Android Studio,Android Layout,Listview,我正在android studio中完成我的第一个相当大的项目,在过去的三天里,我一直在努力: 我的应用程序有一个底部导航组件,可以打开另外3个片段,我想知道如何在这3个片段中实现ListView。我设法将ListView放在主布局(activity_main.xml)中,但一旦我将ListView放在非主布局的布局中,我就会得到一个NPE。我想这是因为如果我试图用findViewById(R.id.ListView)将ListView链接到它的数据,它会在activity_main中查找Lis
Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
这是相关的代码位:
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv_productlist = findViewById(R.id.lv_productlist);
showFoodOnListView(db_helper);
}
将数据传递到ListView的代码:
private void showFoodOnListView(DB_Helper db_helper2) {
food_ArrayAdapter = new ArrayAdapter<Product_Model>(MainActivity.this, android.R.layout.simple_list_item_1, db_helper2.getEveryone());
lv_productlist.setAdapter(food_ArrayAdapter);
}
我必须将上面的代码移动到相应的java类中,例如fragment_A.java
然后我不得不将showFoodOnListView方法移动到fragment_A.java中
并将上下文设置为getActivity():
food_ArrayAdapter=new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,db_helper2.getEveryone());
假设您需要将ListView添加到片段A
首先,您必须为片段a(即Fragment_a.xml)创建一个布局
将您的列表视图
添加到fragment_a.xml
然后您的FragmentA.java
代码应该如下所示:
public class FragmentA extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_a, container, false);
// get the reference of ListView
lv_productlist = (ListView) view.findViewById(R.id.lv_productlist);
showFoodOnListView(db_helper);
return view;
}
}
假设您需要将ListView添加到片段A 首先,您必须为片段a(即Fragment_a.xml)创建一个布局 将您的
列表视图
添加到fragment_a.xml
然后您的FragmentA.java
代码应该如下所示:
public class FragmentA extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_a, container, false);
// get the reference of ListView
lv_productlist = (ListView) view.findViewById(R.id.lv_productlist);
showFoodOnListView(db_helper);
return view;
}
}
在片段的布局中包含listview,并从该片段访问它,而不是从主活动中访问它。需要注意的是,listview实际上是一个RecyclerView@PrinceAli我知道回收视图,那只是一个暂时的实验。你能告诉我应该如何从该片段访问它吗?在片段的布局中包括listview,并从该片段访问它,而不是主要活动。还有一点需要注意的是,你的listview实际上是一个RecyclerView@PrinceAli我知道回收视图,那只是一个暂时的实验。你能告诉我应该如何从该片段访问它吗?我也需要将showFoodOnListView方法引入FragmentA.java,不是吗?是的,将其移动到FragmentA.java代码中非常感谢,这正是我所需要的。唯一让我“窃听”的是给foodArrayAdapter什么上下文,但我找到了。getActivity()我将其标记为解决方案并进行了投票。但是我的名声不到15岁,所以没有表现出来。无论如何,再次感谢你的帮助。我被困了这么久!我也需要将showFoodOnListView方法引入FragmentA.java中,不是吗?是的,将它移到FragmentA.java代码中非常感谢,这正是我所需要的。唯一让我“窃听”的是给foodArrayAdapter什么上下文,但我找到了。getActivity()我将其标记为解决方案并进行了投票。但是我的名声不到15岁,所以没有表现出来。无论如何,再次感谢你的帮助。我被困了这么久!
food_ArrayAdapter = new ArrayAdapter<Product_Model>(getActivity(), android.R.layout.simple_list_item_1, db_helper2.getEveryone());
public class FragmentA extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_a, container, false);
// get the reference of ListView
lv_productlist = (ListView) view.findViewById(R.id.lv_productlist);
showFoodOnListView(db_helper);
return view;
}
}