java - Android 中的计数器出现错误

标签 java android android-layout

以下是我的代码。我需要获取 FloatingActionButton 中的增量值。我已经写好了代码。

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="database.fab.MainActivity">

    <ListView
        android:id="@+id/lvListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/rel1" >

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/rlRelativeLayout"
            android:layout_margin="16dp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true" >

            <android.support.design.widget.FloatingActionButton
                android:id="@+id/fab"
                android:layout_width="65dp"
                android:layout_height="65dp"
                android:layout_gravity="bottom|end"
                android:src="@mipmap/cart_main"
                android:clickable="true"
                android:scaleType="fitXY"
                android:onClick="fab" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/null_value_zero"
                android:id="@+id/fab_text"
                android:textColor="#42b138"
                android:layout_marginTop="23dp"
                android:layout_centerHorizontal="true"
                android:textStyle="bold"
                android:textSize="17sp"
                android:elevation="7dp" />

       </RelativeLayout>

    </RelativeLayout>

</RelativeLayout>

custom_listview.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_margin="16dp"
    android:background="#FFFFFF"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="140dp">

        <ImageView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_marginStart="20dp"
            android:layout_marginLeft="20dp"
            android:layout_centerVertical="true"
            android:id="@+id/ivImageViewMain"/>

        <ImageView
            android:layout_width="120dp"
            android:layout_height="80dp"
            android:id="@+id/CounterImage"
            android:src="@mipmap/main_add"
            android:layout_marginRight="20dp"
            android:layout_marginEnd="20dp"
            android:layout_centerVertical="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"/>

    </RelativeLayout>

</RelativeLayout>

MainActivity.java

package database.fab;

import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    ListView lvListView;
    ImageView CounterImage;
    TextView fab_text;
    Adapter adapter;
    int counter = 0;

   int[] images_item = {
            R.mipmap.apple,
            R.mipmap.blackberry,
            R.mipmap.cherry,
            R.mipmap.coconut,
            R.mipmap.grapes,
            R.mipmap.orange,
            R.mipmap.peach,
            R.mipmap.pineapple,
            R.mipmap.pomegranate,
            R.mipmap.banana
    };

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

        lvListView = (ListView) findViewById(R.id.lvListView);
        fab_text = (TextView) findViewById(R.id.fab_text);

        ImageView imageView= (ImageView) findViewById(R.id.CounterImage);
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                counter++;
                fab_text.setText(String.valueOf(counter));
            }
        });

        adapter = new Adapter(getApplicationContext(), R.layout.custom_listview);
        lvListView.setAdapter(adapter);
        int i = 0;
        for (int Image : images_item){
            Helper helper = new Helper(images_item[i]);
            adapter.add(helper);
            i++;
        }

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);

    }
}

适配器.java

package database.fab;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;

import java.util.ArrayList;
import java.util.List;

public class Adapter extends ArrayAdapter {

    List arrayList = new ArrayList();

    public Adapter(Context context, int resource) {
        super(context, resource);
    }

    int counter;

    public void add(Helper object) {
        super.add(object);
        arrayList.add(object);
    }

    static class ImageHolder{
        ImageView img_item;
    }

    @Override
    public int getCount() {
        return this.arrayList.size();
    }

    @Override
    public Object getItem(int position) {
        return this.arrayList.get(position);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view;
        view = convertView;
        ImageHolder imageHolder;

        if (convertView == null) {

            LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = layoutInflater.inflate(R.layout.custom_listview, parent, false);
            imageHolder = new ImageHolder();
            imageHolder.img_item = (ImageView) view.findViewById(R.id.ivImageViewMain);

            view.setTag(imageHolder);
        }
        else {
            imageHolder = (ImageHolder) view.getTag();
        }

        Helper h;
        h = (Helper) this.getItem(position);
        imageHolder.img_item.setImageResource(h.getImage_item());

        return (view);
    }
}

Helper.java

package database.fab;

public class Helper {

    private int image_item;

    public Helper(int image_item) {
        this.image_item = image_item;
    }

    public int getImage_item() {
        return image_item;
    }

    public void setImage_item(int image_item) {
        this.image_item = image_item;
    }
}

错误

12-21 13:01:00.535 13336-13336/? E/AndroidRuntime: FATAL EXCEPTION: main
                                               Process: database.fab, PID: 13336
                                               java.lang.RuntimeException: Unable to start activity ComponentInfo{database.fab/database.fab.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308)
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2368)
                                                   at android.app.ActivityThread.access$800(ActivityThread.java:144)
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1285)
                                                   at android.os.Handler.dispatchMessage(Handler.java:102)
                                                   at android.os.Looper.loop(Looper.java:135)
                                                   at android.app.ActivityThread.main(ActivityThread.java:5233)
                                                   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:898)
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
                                                Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                                                   at database.fab.MainActivity.onCreate(MainActivity.java:42)
                                                   at android.app.Activity.performCreate(Activity.java:6001)
                                                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261)
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2368) 
                                                   at android.app.ActivityThread.access$800(ActivityThread.java:144) 
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1285) 
                                                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                   at android.os.Looper.loop(Looper.java:135) 
                                                   at android.app.ActivityThread.main(ActivityThread.java:5233) 
                                                   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:898) 
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693) 

我需要在按下添加图像后获取 FloatingActionButton 中的增量值。不知道我哪里错了。请在这件事上给予我帮助。提前致谢。

最佳答案

更新:恢复这个,我错过了第二个 ImageView - sry

更改此:

ImageView imageView= (ImageView) findViewById(R.id.CounterImage);

至:

ImageView imageView= (ImageView) findViewById(R.id.ivImageViewMain);
<小时/>

更新:

在您的主要 Activity 中,您将 View 设置为activity_main.xml:

setContentView(R.layout.activity_main);

然后您尝试使用 ID CounterImage 获取 View :

ImageView imageView = (ImageView) findViewById(R.id.CounterImage)

activity_main.xml 中不存在

<小时/>

更新2:

您应该了解一些 Java 和 Android 基础知识。

int i = 0;
for (int Image : images_item){
    Helper helper = new Helper(images_item[i]);
    adapter.add(helper);
    i++;
}

您在这里混合了两个 for 循环。

这个:

for(int image : images_item) {
    adapter.add(new Helper(image));
}

将是做同样事情的更好方法。

<小时/>

更新3:

您正在 Adapter.java 中扩展正确的布局:

view = layoutInflater.inflate(R.layout.custom_listview, parent, false);

您可以在此处添加一个 OnClickListener:

ImageView imageView= (ImageView) view.findViewById(R.id.CounterImage);
imageView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        counter++;
        fab_text.setText(String.valueOf(counter));
    }
});

不要忘记从 Activity 中删除错误代码。

关于java - Android 中的计数器出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34391427/

相关文章:

Java正则表达式匹配字符串

java - 在同一项目中使用 Java 和 Kotlin Activity

java - 清洁架构 : How to reflect the data layer's changes in the UI

android - 以编程方式计算textview的宽度

java - 另一个类的 Mockito 对象方法

java - 如何提取 <p> 标签之间的文本

java - 奇怪的未定义方法错误

java - 离线 HTML Android 应用程序中的数据库?

android - 在 Android Studio 中使用 ImageView 避免 OutOfMemory 错误

android - ScrollView 向下滚动并在点击 EditText 以获得焦点时突然向上滚动