繁体   English   中英

Android使用GridView尝试调用虚拟方法集适配器

[英]Android Working With GridView Attempt to invoke virtual method set Adapter

import android.content.Context;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;

import com.nusecond.suredeal.app.R;
import com.nusecond.suredeal.app.suredeal.adapter.CustomAdapter;
import com.nusecond.suredeal.app.suredeal.adapter.CustomPromoAdapter;

import java.util.ArrayList;

public class Promo extends AppCompatActivity {
    GridView gv;
    Context context;
    ArrayList programName;
    public static String[] programNameList={"AppleMacBook","HP_note_Book","LG_NEXUS","NokiaLumia","SamsungRT","SONY_BRAVIA","Sansui"};
    public static int [] programImages={R.drawable.apple,R.drawable.hp,R.drawable.nexus,R.drawable.lumia,R.drawable.fridge,R.drawable.tv,R.drawable.tv1};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gv=(GridView)findViewById(R.id.gridView1);
        //gv.setAdapter(new CustomPromoAdapter(this,programNameList,programImages));
        gv.setAdapter(new CustomPromoAdapter(this,programNameList,programImages));

    }
}
  1. 这是我在GridView中显示图像和文本的活动。
  2. 我正在为此目的进行其他一些活动。
  3. 我在使用setAdapter方法时出错。
  4. 下面是我的适配器。

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.nusecond.suredeal.app.R;
import com.nusecond.suredeal.app.suredeal.activity.MainActivity;
import com.nusecond.suredeal.app.suredeal.activity.Promo;

/**
 * Created by ns2 on 2/4/16.
 */
public class CustomPromoAdapter extends BaseAdapter{
    ImageView imageView;
    TextView textView;
    String [] result;
    Context context;
    int [] imageId;
    private static LayoutInflater inflater=null;
    public CustomPromoAdapter(Promo promo, String[] programNameList, int[] programImages) {
        // TODO Auto-generated constructor stub
        result=programNameList;
        context=promo;
        imageId=programImages;
        inflater = ( LayoutInflater )context.
                getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    @Override
    public int getCount() {
        return result.length;
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View view;
        view=inflater.inflate(R.layout.promo_gridlist,null);
        textView=(TextView)view.findViewById(R.id.textView1);
        imageView=(ImageView)view.findViewById(R.id.imageView1);
        imageView.setImageResource(imageId[position]);
        textView.setText(imageId[position]);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "You Clicked " + result[position], Toast.LENGTH_LONG).show();
            }
        });
        return view;
    }
}
  1. 这是我的适配器,我不知道哪里出了问题。
  2. 开始此活动时,我的应用程序崩溃了。

致命异常:主过程:com.nusecond.suredeal.app.suredeal,PID:25273 java.lang.RuntimeException:无法启动活动ComponentInfo {com.nusecond.suredeal.app.suredeal / com.nusecond.suredeal.app.suredeal .activity.Promo}:java.lang.NullPointerException:尝试在android.app.ActivityThread.performLaunchActivity(ActivityThread。)上的空对象引用上调用虚拟方法'void android.widget.GridView.setAdapter(android.widget.ListAdapter)'。 java:2416)位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)位于android.app.ActivityThread.-wrap11(ActivityThread.java)位于android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1344)在android.os.Handler.dispatchMessage(Handler.java:102)在android.os.Looper.loop(Looper.java:148)在android.app.ActivityThread.main(ActivityThread.java:5417)在java.lang。 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)上的com.android.internal.os上的Reflection.Method.invoke(本机方法)。 ZygoteInit.main(ZygoteInit.java:616)原因:java.lang.NullPointerException:尝试在com.nusecond的空对象引用上调用虚拟方法'void android.widget.GridView.setAdapter(android.widget.ListAdapter)' .suredeal.app.suredeal.activity.Promo.onCreate(Promo.java:36)在android.app.Activity.performCreate(Activity.java:6237)在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)在android.app.ActivityThread.-wrap11(ActivityThread.java)在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1344)(位于android.os.Handler.dispatchMessage(Handler.java:102)(位于android.os.Looper.loop(Looper.java:148)),位于android.app.ActivityThread.main(ActivityThread) .java:5417),位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java.lang.reflect.Method.invoke(本机方法)处。 java:726)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)


这是我的错误日志任何人都可以帮助我解决此问题。

尝试这个,

 CustomPromoAdapter adapter = new CustomPromoAdapter(this,programNameList,programImages)
    gv.setAdapter(adapter);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM