Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NotifyDatasetchanged不工作。应用程序在单击按钮后崩溃_Java_Android_Android Studio_Crash_Dynamically Generated - Fatal编程技术网

Java NotifyDatasetchanged不工作。应用程序在单击按钮后崩溃

Java NotifyDatasetchanged不工作。应用程序在单击按钮后崩溃,java,android,android-studio,crash,dynamically-generated,Java,Android,Android Studio,Crash,Dynamically Generated,我一直在尝试创建一个按钮,在单击时为我的Arraylist(contries)添加一个新值,但它没有添加我的项目(卡片),应用程序只是崩溃了。我也在使用片段。这是我的密码 那是我的班级,我的零碎页面 package com.example.barryblack; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup

我一直在尝试创建一个按钮,在单击时为我的Arraylist(contries)添加一个新值,但它没有添加我的项目(卡片),应用程序只是崩溃了。我也在使用片段。这是我的密码

那是我的班级,我的零碎页面

package com.example.barryblack;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;

public class FragmentPage extends Fragment {

private RecyclerView.Adapter mAdapter;
private ArrayList countries;
Button btn;






@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable 
Bundle savedInstanceState) {

    CreateExampleList();

    View view = inflater.inflate(R.layout.page_fragment, container, false);

    RecyclerView recyclerView = view.findViewById(R.id.listRecyclerView);

    btn = view.findViewById(R.id.button_insert);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            InsertItem();

        }
    });

    recyclerView.setHasFixedSize(true);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
    recyclerView.setLayoutManager(layoutManager);
    RecyclerView.Adapter adapter = new MyAdapter(countries);
    recyclerView.setAdapter(adapter);


    return view;
}

public void InsertItem() {
    countries.add("Smile");
    mAdapter.notifyDataSetChanged();


}

private void CreateExampleList() {
    countries = new ArrayList<String>();
    countries.add("Eat");
    countries.add("Kill");

}





}
package com.example.barryblack;
导入android.os.Bundle;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.Button;
导入androidx.annotation.NonNull;
导入androidx.annotation.Nullable;
导入androidx.fragment.app.fragment;
导入androidx.recyclerview.widget.LinearLayoutManager;
导入androidx.recyclerview.widget.recyclerview;
导入java.util.ArrayList;
公共类碎片页扩展了碎片{
专用回收器查看适配器mAdapter;
私营ArrayList国家;
按钮btn;
@可空
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable
Bundle savedInstanceState){
CreateExampleList();
视图=充气机。充气(R.layout.page_碎片,容器,false);
RecyclerView RecyclerView=view.findViewById(R.id.listRecyclerView);
btn=view.findviewbyd(R.id.button\u insert);
btn.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
插入项();
}
});
recyclerView.setHasFixedSize(true);
RecyclerView.LayoutManager LayoutManager=新的LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
RecyclerView.Adapter=新的MyAdapter(国家/地区);
recyclerView.setAdapter(适配器);
返回视图;
}
public void InsertItem(){
添加(“微笑”);
mAdapter.notifyDataSetChanged();
}
私有void CreateExampleList(){
国家/地区=新阵列列表();
添加(“Eat”);
添加(“杀死”);
}
}
这是我的自定义适配器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private ArrayList<String> cards;

public MyAdapter(ArrayList<String> countries) {
    this.cards = countries;
}

@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.example_item, viewGroup, 
false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(MyAdapter.ViewHolder viewHolder, int i) {

    viewHolder.tv_country.setText(cards.get(i));
}

@Override
public int getItemCount() {
    return cards.size();
}

public class ViewHolder extends RecyclerView.ViewHolder{
    private TextView tv_country;
    private Button tv_button;
    public ViewHolder(View view) {
        super(view);

        tv_country = (TextView)view.findViewById(R.id.tv_country);

    }
}

}public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private ArrayList<String> cards;

public MyAdapter(ArrayList<String> countries) {
    this.cards = countries;
}

@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.example_item, viewGroup, 
false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(MyAdapter.ViewHolder viewHolder, int i) {

    viewHolder.tv_country.setText(cards.get(i));
}

@Override
public int getItemCount() {
    return cards.size();
}

public class ViewHolder extends RecyclerView.ViewHolder{
    private TextView tv_country;
    private Button tv_button;
    public ViewHolder(View view) {
        super(view);

        tv_country = (TextView)view.findViewById(R.id.tv_country);

    }
}

}
公共类MyAdapter扩展了RecyclerView.Adapter{ 私人ArrayList卡; 公共MyAdapter(ArrayList国家/地区){ 这意味着国家; } @凌驾 public MyAdapter.ViewHolder onCreateViewHolder(视图组视图组,int i){ View View=LayoutFlater.from(viewGroup.getContext())。充气(R.layout.example_项,视图组, 假); 返回新的ViewHolder(视图); } @凌驾 public void onBindViewHolder(MyAdapter.ViewHolder-ViewHolder,int i){ viewHolder.tv_country.setText(cards.get(i)); } @凌驾 public int getItemCount(){ 返回卡。大小(); } 公共类ViewHolder扩展了RecyclerView.ViewHolder{ 国家/地区的私人文本视图电视; 专用按钮tv_按钮; 公共视图持有者(视图){ 超级(视图); tv_country=(TextView)view.findviewbyd(R.id.tv_country); } } }公共类MyAdapter扩展了RecyclerView.Adapter{ 私人ArrayList卡; 公共MyAdapter(ArrayList国家/地区){ 这意味着国家; } @凌驾 public MyAdapter.ViewHolder onCreateViewHolder(视图组视图组,int i){ View View=LayoutFlater.from(viewGroup.getContext())。充气(R.layout.example_项,视图组, 假); 返回新的ViewHolder(视图); } @凌驾 public void onBindViewHolder(MyAdapter.ViewHolder-ViewHolder,int i){ viewHolder.tv_country.setText(cards.get(i)); } @凌驾 public int getItemCount(){ 返回卡。大小(); } 公共类ViewHolder扩展了RecyclerView.ViewHolder{ 国家/地区的私人文本视图电视; 专用按钮tv_按钮; 公共视图持有者(视图){ 超级(视图); tv_country=(TextView)view.findviewbyd(R.id.tv_country); } } } 还有我的博客

java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“void androidx.recyclerview.widget.recyclerview$Adapter.notifyDataSetChanged()” 位于com.example.barryblack.FragmentPage.InsertItem(FragmentPage.java:60)
在com.example.barryblack.FragmentPage$1.onClick(FragmentPage.java:43)

这段代码
私有回收视图.Adapter mAdapter

必须是
private MyAdapter mAdapter

这个
RecyclerView.Adapter=新的MyAdapter(国家/地区)


MyAdapter mAdapter=新的MyAdapter(国家/地区)

MyAdapter=新的MyAdapter(国家/地区)
因此我将Recycler.Adapter与您的适配器切换,但我仍然收到相同的错误,应用程序仍然崩溃。您从未将
mAdapter
分配到任何位置,因此
InsertItem()
中的值为空。更改
RecyclerView.Adapter=新的MyAdapter(国家/地区)
mAdapter=新MyAdapter(国家/地区)。请注意,这行开头没有输入。非常感谢您的帮助,我终于完成了:我不想成为那个家伙,但它仍然崩溃了。对于空对象引用,我仍然会收到此Logcat错误void com.example.barryblack.MyAdapter.notifyDataSetChanged()。我真的认为错误在insertitem方法中。尽管如此,我仍然非常感谢您的快速回答。我认为您必须将初始变量移动到onviewcreated。让oncreateview声明您的布局