Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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.lang.Object java.util.List.remove(int)和#x27;在空对象引用上|尝试从回收器视图中删除_Java_Android Studio - Fatal编程技术网

尝试调用接口方法';java.lang.Object java.util.List.remove(int)和#x27;在空对象引用上|尝试从回收器视图中删除

尝试调用接口方法';java.lang.Object java.util.List.remove(int)和#x27;在空对象引用上|尝试从回收器视图中删除,java,android-studio,Java,Android Studio,我试图从回收器视图中删除,但我收到错误,不知道原因。我正在收听删除按钮的点击,并将id发送到要删除的主要活动,但它说列表为空,不应该为空!我想在单击按钮时从recycler视图中删除一个项目,该项目链接到一个项目id,该id被发送到mainactivity以从productList中删除,但在onCreate上明确加载了大量元素时表示为空 这是main活动类: public class MainActivity extends AppCompatActivity { private

我试图从回收器视图中删除,但我收到错误,不知道原因。我正在收听删除按钮的点击,并将id发送到要删除的主要活动,但它说列表为空,不应该为空!我想在单击按钮时从recycler视图中删除一个项目,该项目链接到一个项目id,该id被发送到mainactivity以从productList中删除,但在onCreate上明确加载了大量元素时表示为空


这是
main活动
类:

public class MainActivity extends AppCompatActivity {

    private Toolbar mainToolBar;

    private AdView mAdView;

    RecyclerView recyclerView;
    ProductAdapter adapter;

    List<Product> productList;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);




        loadData();



        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);

        recyclerView.setLayoutManager(new LinearLayoutManager(this));



        adapter = new ProductAdapter(this, productList);
        recyclerView.setAdapter(adapter);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.main_menu, menu);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        startActivity(new Intent(MainActivity.this, activity_add.class));


        return true;
    }



    public void deleteItem(int id){

        id = id - 1;
        productList.remove(id);
        adapter.notifyItemRemoved(id);
    }
    private void loadData(){
        SharedPreferences sharedPreferences = getSharedPreferences("shared 
        prefs", 0);
        Gson gson = new Gson();
        String json = sharedPreferences.getString("items", null);
        Type type = new TypeToken<ArrayList<Product>>(){}.getType();
        productList = gson.fromJson(json, type);

        if(productList == null){
            productList = new ArrayList<>();
        }
    }

    private void addToList(){
        SharedPreferences sharedPreferences = getSharedPreferences("shared prefs", 0);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        Gson gson = new Gson();
        String json = gson.toJson(productList);
        editor.putString("items", json);
        editor.apply();
    }

}
public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.ProductViewHolder>{

    private Context mCtx;
    private List<Product> productList;

    public ProductAdapter(Context mCtx, List<Product> productList) {
        this.mCtx = mCtx;
        this.productList = productList;
    }

    @NonNull
    @Override
    public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        LayoutInflater inflater = LayoutInflater.from(mCtx);
        View view = inflater.inflate(R.layout.list_layout, null);
        return new ProductViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ProductViewHolder holder, int position) {
        final Product product = productList.get(position);

        holder.textViewTitle.setText(product.getTitle());
        holder.textViewRating.setText(String.valueOf(product.getRating()));



        holder.deleteBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new MainActivity().deleteItem(product.getId());
            }
        });
    }

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

    class ProductViewHolder extends RecyclerView.ViewHolder{

        TextView textViewTitle, textViewRating;

        Button deleteBtn;

        public ProductViewHolder(View itemView) {
            super(itemView);

            textViewTitle = itemView.findViewById(R.id.textViewTitle);
            textViewRating = itemView.findViewById(R.id.textViewRating);

            deleteBtn = itemView.findViewById(R.id.deleteBtn);

        }
    }
}

问题是您试图在此处创建
MainActivity
的新实例:

newmainActivity().deleteItem(product.getId())

您的
main活动
应该实现一个侦听器,然后您可以将其传递给
ProductAdapter
构造函数:


deleteListener.deleteItem(product.getId())

在loadData()和mainActivity的顶部初始化变量
productList
?是否发布该方法?您刚刚更新了它,本打算添加但无意中遗漏了它我真的不明白实现侦听器是什么以及如何实现它我只想在主活动中调用一个函数,该函数可以更新列表,然后更新回收器视图并将其保存到共享首选项中