Java 如何连接';它不在主布局中吗?

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

我正在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放入另一个片段中,以便在使用底部导航更改选项卡并使其显示数据时,它不会在主布局中浮动

我得到的错误是:

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;
    }
}