更新并删除在运行时的GridView项目 [英] Update and remove GridView items at runtime

查看:120
本文介绍了更新并删除在运行时的GridView项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发一个项目,我比较两个项目的形象,所以,如果点击这些项目应该是隐藏后两个项目都会有相同的图像。我的code下面给出这code遇到问题。这是一个逻辑上的错误或其他问题?我试图解决这个问题,但我以前不解决。请指引我......这是我的主要活动。结果
MainActivity.java

 公共类MainActivity延伸活动{
    上下文CTX;
    INT imagesArray [];
    ImageAdapter适配器;
    清单<整数GT;图片;
    布尔flage = FALSE;
    GridView控件GridView控件;
    INT保存1,保存2;
    INT IMG1 = -1,IMG2 = -1;
    公众诠释OriginalArray [] = {R.drawable.sample_0,R.drawable.sample_1,
            R.drawable.sample_2,R.drawable.sample_3,R.drawable.sample_0,
            R.drawable.sample_1,R.drawable.sample_2,R.drawable.sample_3};    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);
        最终的ImageView MYIMAGE =新ImageView的(CTX);
        GridView控件=(GridView控件)findViewById(R.id.gv_memory);
        gridView.setAdapter(适配器);
         shuffleArray();        gridView.setOnItemClickListener(新OnItemClickListener(){            @覆盖
            公共无效onItemClick(适配器视图<>为arg0,ARG1查看,
                    INT位置,长ARG3){
                // TODO自动生成方法存根
                myimage.setImageResource(pictures.get(位置));                如果(flage == FALSE){                    IMG1 = pictures.get(位置);
                    flage = TRUE;                }否则如果(flage ==真){                    IMG2 = pictures.get(位置);                    checkResult();                    flage = FALSE;
                }
        }
            私人无效checkResult(){
                // TODO自动生成方法存根                如果(IMG1 == IMG2){
                    adapter.pictureList.remove(IMG1);
                    adapter.pictureList.remove(IMG2);
                    adapter.notifyDataSetChanged();
                    Toast.makeText(MainActivity.thisCongratualatin !!!!
                            Toast.LENGTH_LONG).show();
                }其他{
                    Toast.makeText(MainActivity.this,对不起!!!!
                            Toast.LENGTH_LONG).show();                }
            }
        });
    }    私人无效shuffleArray(){
        // TODO自动生成方法存根
        照片=新的ArrayList<整数GT;();
        对于(INT指数= 0;指数 - LT; OriginalArray.length;指数++){
            pictures.add(OriginalArray [指数]);
        }
        Collections.shuffle(照片);    }
}

ImageAdapter.java

 公共类ImageAdapter延伸BaseAdapter {    私人上下文的背景下;
    清单<整数GT; pictureList =新的ArrayList<整数GT;();    公共ImageAdapter(上下文C){
        上下文= C;
         的for(int i = 0; I< 8;我++){
             pictureList.add(R.drawable.question);
         }
    }    @覆盖
    公众诠释的getCount(){
        // TODO自动生成方法存根
        返回(pictureList.size());
    }    @覆盖
    公共对象的getItem(INT位置){
        // TODO自动生成方法存根
        返回pictureList.get(位置);
    }    @覆盖
    众长getItemId(INT位置){
        // TODO自动生成方法存根
        返回的位置;
    }
    @覆盖
    公共查看getView(INT位置,查看convertView,父母的ViewGroup){
        // TODO自动生成方法存根
        ImageView的MYIMAGE =新ImageView的(上下文);
        myimage.setImageResource(pictureList.get(位置));
        myimage.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        myimage.setLayoutParams(新GridView.LayoutParams(70,70));
        返回MYIMAGE;
    }}

LogCat中。

  6月3日至十四日:09:03.793:D / dalvikvm(2877):GC_FOR_ALLOC释放54K,8%的免费2771K / 2996K,暂停111ms,117ms总
6月3日至十四日:09:03.802:I / dalvikvm堆(2877):成长堆(frag的情况下),以3.943MB为1127536字节分配
6月3日至十四日:09:03.922:D / dalvikvm(2877):GC_FOR_ALLOC释放2K,6%免费3870K / 4100K,暂停118ms,118ms总
6月3日至十四日:09:03.962:D / AndroidRuntime(2877):关闭VM
6月3日至十四日:09:03.962:W / dalvikvm(2877):主题ID = 1:螺纹未捕获的异常(组= 0x41465700)退出
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):致命异常:主要
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):了java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.memory / com.example.memory.MainActivity}:显示java.lang.NullPointerException
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在android.app.ActivityThread.access $ 600(ActivityThread.java:141)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1256)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在android.os.Handler.dispatchMessage(Handler.java:99)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在android.os.Looper.loop(Looper.java:137)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在android.app.ActivityThread.main(ActivityThread.java:5103)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在java.lang.reflect.Method.invokeNative(本机方法)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在java.lang.reflect.Method.invoke(Method.java:525)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在dalvik.system.NativeStart.main(本机方法)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):因:显示java.lang.NullPointerException
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在android.view.ViewConfiguration.get(ViewConfiguration.java:318)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在android.view.View<&初始化GT;(View.java:3264)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在android.widget.ImageView<&初始化GT;(ImageView.java:112)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在com.example.memory.MainActivity.onCreate(MainActivity.java:33)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在android.app.Activity.performCreate(Activity.java:5133)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
6月3日至十四日:09:03.972:E / AndroidRuntime(2877):11 ...更多
6月3日至十四日:14:04.503:I /流程(2877):发送信号。 PID:2877 SIG:9


解决方案

 最后的ImageView MYIMAGE =新ImageView的(CTX);

CTZ 未初始化。它唯一的声明为上下文CTX ;

您有这

  gridView.setAdapter(适配器);

但你需要并初始化适配器使用相同的前

所以改为

 的setContentView(R.layout.main);
最终的ImageView MYIMAGE =新ImageView的(本); //这是指活动范围内
GridView控件=(GridView控件)findViewById(R.id.gv_memory);
适配器=新ImageAdapter(本)
gridView.setAdapter(适配器);

i am developing a project where i compare the images of two items,So if two items will have same image after clicking these items should be hide. my code is given below and this code encounter a problem. is this a logical error or any other issue? i try to solve the issue but did't resolve.. Please guide me... here is my main Activity.
MainActivity.java

public class MainActivity extends Activity {
    Context ctx;
    int imagesArray[];
    ImageAdapter adapter;
    List<Integer> pictures;
    boolean flage = false;
    GridView gridView;
    int save1, save2;
    int img1 = -1, img2 = -1;
    public int OriginalArray[] = { R.drawable.sample_0, R.drawable.sample_1,
            R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_0,
            R.drawable.sample_1, R.drawable.sample_2, R.drawable.sample_3 };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        final ImageView myimage = new ImageView(ctx);
        gridView = (GridView) findViewById(R.id.gv_memory);
        gridView.setAdapter(adapter);
         shuffleArray();

        gridView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1,
                    int position, long arg3) {
                // TODO Auto-generated method stub
                myimage.setImageResource(pictures.get(position));

                if (flage == false) {

                    img1 = pictures.get(position);
                    flage = true;

                } else if (flage == true) {

                    img2 = pictures.get(position);

                    checkResult();

                    flage = false;
                }
        }
            private void checkResult() {
                // TODO Auto-generated method stub

                if (img1 == img2) {
                    adapter.pictureList.remove(img1);
                    adapter.pictureList.remove(img2);
                    adapter.notifyDataSetChanged();
                    Toast.makeText(MainActivity.this, "Congratualatin !!!!",
                            Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(MainActivity.this, "Sorry!!!!",
                            Toast.LENGTH_LONG).show();

                }
            }
        });
    }

    private void shuffleArray() {
        // TODO Auto-generated method stub
        pictures = new ArrayList<Integer>();
        for (int index = 0; index < OriginalArray.length; index++) {
            pictures.add(OriginalArray[index]);
        }
        Collections.shuffle(pictures);

    }


}       

ImageAdapter.java

public class ImageAdapter extends BaseAdapter {

    private Context context;
    List<Integer> pictureList = new ArrayList<Integer>();

    public ImageAdapter(Context c) {
        context = c;
         for (int i = 0; i < 8; i++) {
             pictureList.add(R.drawable.question);
         }
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return (pictureList.size());
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return pictureList.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ImageView myimage = new ImageView(context);
        myimage.setImageResource(pictureList.get(position));
        myimage.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
        myimage.setLayoutParams(new GridView.LayoutParams(70, 70));
        return myimage;
    }

}       

LogCat.

03-14 06:09:03.793: D/dalvikvm(2877): GC_FOR_ALLOC freed 54K, 8% free 2771K/2996K, paused 111ms, total 117ms
03-14 06:09:03.802: I/dalvikvm-heap(2877): Grow heap (frag case) to 3.943MB for 1127536-byte allocation
03-14 06:09:03.922: D/dalvikvm(2877): GC_FOR_ALLOC freed 2K, 6% free 3870K/4100K, paused 118ms, total 118ms
03-14 06:09:03.962: D/AndroidRuntime(2877): Shutting down VM
03-14 06:09:03.962: W/dalvikvm(2877): threadid=1: thread exiting with uncaught exception (group=0x41465700)
03-14 06:09:03.972: E/AndroidRuntime(2877): FATAL EXCEPTION: main
03-14 06:09:03.972: E/AndroidRuntime(2877): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.memory/com.example.memory.MainActivity}: java.lang.NullPointerException
03-14 06:09:03.972: E/AndroidRuntime(2877):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
03-14 06:09:03.972: E/AndroidRuntime(2877):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
03-14 06:09:03.972: E/AndroidRuntime(2877):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
03-14 06:09:03.972: E/AndroidRuntime(2877):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
03-14 06:09:03.972: E/AndroidRuntime(2877):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-14 06:09:03.972: E/AndroidRuntime(2877):     at android.os.Looper.loop(Looper.java:137)
03-14 06:09:03.972: E/AndroidRuntime(2877):     at android.app.ActivityThread.main(ActivityThread.java:5103)
03-14 06:09:03.972: E/AndroidRuntime(2877):     at java.lang.reflect.Method.invokeNative(Native Method)
03-14 06:09:03.972: E/AndroidRuntime(2877):     at java.lang.reflect.Method.invoke(Method.java:525)
03-14 06:09:03.972: E/AndroidRuntime(2877):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-14 06:09:03.972: E/AndroidRuntime(2877):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-14 06:09:03.972: E/AndroidRuntime(2877):     at dalvik.system.NativeStart.main(Native Method)
03-14 06:09:03.972: E/AndroidRuntime(2877): Caused by: java.lang.NullPointerException
03-14 06:09:03.972: E/AndroidRuntime(2877):     at android.view.ViewConfiguration.get(ViewConfiguration.java:318)
03-14 06:09:03.972: E/AndroidRuntime(2877):     at android.view.View.<init>(View.java:3264)
03-14 06:09:03.972: E/AndroidRuntime(2877):     at android.widget.ImageView.<init>(ImageView.java:112)
03-14 06:09:03.972: E/AndroidRuntime(2877):     at com.example.memory.MainActivity.onCreate(MainActivity.java:33)
03-14 06:09:03.972: E/AndroidRuntime(2877):     at android.app.Activity.performCreate(Activity.java:5133)
03-14 06:09:03.972: E/AndroidRuntime(2877):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
03-14 06:09:03.972: E/AndroidRuntime(2877):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
03-14 06:09:03.972: E/AndroidRuntime(2877):     ... 11 more
03-14 06:14:04.503: I/Process(2877): Sending signal. PID: 2877 SIG: 9

解决方案

You have

final ImageView myimage = new ImageView(ctx);

ctz is not initialized. Its only declared as Context ctx;

You have this

gridView.setAdapter(adapter);

But you need to intialize adapter before using the same

So change to

setContentView(R.layout.main);
final ImageView myimage = new ImageView(this); //this refers to Activity context
gridView = (GridView) findViewById(R.id.gv_memory);
adapter = new ImageAdapter(this)
gridView.setAdapter(adapter);

这篇关于更新并删除在运行时的GridView项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆