在Android Studio中,我的Toast消息有问题

问题描述 投票:-1回答:1

[我在Android Studio中有项目,但有RecyclerView,模型类是:item(字符串名称,int图像),我想在单击item时显示Toast消息包括item_name。但这是运行已停止的应用程序。我不知道我的代码有什么错误您能帮我吗?

[模型类

public class item {
    String name ;
    int image ;

    public item(String name, int image) {
        this.name = name;
        this.image = image;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getImage() {
        return image;
    }

    public void setImage(int image) {
        this.image = image;
    }
}

一个接口


public interface item_OnClick {
    void OnClick(item i);
}

The item_adapter

public class item_adapter extends RecyclerView.Adapter<item_adapter.item_view_holder> {
    ArrayList<item> places ;
    item_OnClick listener;

    public item_adapter(ArrayList<item> places, item_OnClick listener) {
        this.places = places;
        this.listener = listener;
    }

    @NonNull
    @Override
    public item_view_holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_design,parent,false);
        item_view_holder holder = new item_view_holder(v);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull item_view_holder holder, int position) {
    item i = places.get(position);
    holder.name.setText(i.getName());
    holder.img.setImageResource(i.getImage());
    }

    @Override
    public int getItemCount() {
        return places.size();
    }
    class item_view_holder extends RecyclerView.ViewHolder {
        TextView name ;
        ImageView img ;
         item i ;

        public item_view_holder(@NonNull View itemView) {
            super(itemView);
            name=itemView.findViewById(R.id.item_name);
            img=itemView.findViewById(R.id.item_img1);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    listener.OnClick(i);
                }
            });

        }
    }

}

主要活动


public class MainActivity extends AppCompatActivity implements item_OnClick{
    RecyclerView rv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

          rv = findViewById(R.id.rv);

        ArrayList<item> places = new ArrayList<>();

        places.add(new item("متحف اللوفر" ,R.drawable.lofar));
        places.add(new item("متحف اللوفر" ,R.drawable.lofar));
        places.add(new item("متحف البتراء" ,R.drawable.batra));
        places.add(new item("متحف البتراء" ,R.drawable.batra));
        places.add(new item("متحف الاقصر" ,R.drawable.aqsar));
        places.add(new item("متحف الاقصر" ,R.drawable.aqsar));
        places.add(new item("متحف اللوفر" ,R.drawable.lofar));
        places.add(new item("متحف اللوفر" ,R.drawable.lofar));
        places.add(new item("متحف البتراء" ,R.drawable.batra));
        places.add(new item("متحف البتراء" ,R.drawable.batra));
        places.add(new item("متحف قصر هشام" ,R.drawable.hisham_museum));
        places.add(new item("متحف قصر هشام" ,R.drawable.hisham_museum));

        item_adapter adapter = new item_adapter(places,this);
        rv.setAdapter(adapter);
      GridLayoutManager lm=new GridLayoutManager(this,2);
       rv.setLayoutManager(lm);
       rv.setHasFixedSize(true);

    }

    @Override
    public void OnClick(item i) {
        Toast.makeText(this, i.getName(), Toast.LENGTH_SHORT).show();


    }
}

错误


09-25 18:55:31.490 10410-10410/? E/libprocessgroup: failed to make and chown /acct/uid_10064: Read-only file system
09-25 18:55:42.377 10410-10410/com.zahraa.j_hw1_recyclerview E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.zahraa.j_hw1_recyclerview, PID: 10410
    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.zahraa.j_hw1_recyclerview.item.getName()' on a null object reference
        at com.zahraa.j_hw1_recyclerview.MainActivity.OnClick(MainActivity.java:48)
        at com.zahraa.j_hw1_recyclerview.item_adapter$item_view_holder$1.onClick(item_adapter.java:55)
        at android.view.View.performClick(View.java:4780)
        at android.view.View$PerformClick.run(View.java:19866)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

什么问题?

android android-toast
1个回答
0
投票

您发送listener.OnClick(i);,但没有分配i的位置。 (item i内的onBindViewHolder局部变量,而不是ViewHolder]的字段>

改用listener.OnClick(places.get(getAdapterPosition()));或在onBindViewHolder中分配i:

@Override
    public void onBindViewHolder(@NonNull item_view_holder holder, int position) {
    hodler.i = places.get(position);
    holder.name.setText(i.getName());
    holder.img.setImageResource(i.getImage());
}
© www.soinside.com 2019 - 2024. All rights reserved.