java - 如果两个项目具有相同的图像,则在运行时删除 GridView 项目

标签 java android android-layout gridview

我正在开发一个项目,在其中比较两个项目图像,因此,如果两个项目在单击这些项目后具有相同的图像,则应将其从 GridView 中永久删除。下面给出了我的代码,该代码遇到了问题。请任何人帮助我。

MainActivity.java

 public class MainActivity extends Activity {
    Context ctx;
    int imagesArray[];
    GridViewContent adapter;
    List<Integer> pictures, pictureList;
    boolean flage = false;
    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);
        shuffleArray();
        final GridView grid = (GridView) findViewById(R.id.gv_memory);
        grid.setAdapter(new GridViewContent(this));
    }

    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);
    }
    public class GridViewContent extends BaseAdapter {
        private Context context;
        private List<Integer> pictureList = new ArrayList<Integer>();

        public GridViewContent(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(final int position, final View arg1,
                final ViewGroup arg2) {
            // TODO Auto-generated method stub
            final ImageView myimage = new ImageView(context);
            myimage.setImageResource(pictureList.get(position));
            // myimage.setImageResource(pictures.get(pictureArray[position]));
            myimage.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
            myimage.setLayoutParams(new GridView.LayoutParams(70, 70));
            final GridView grid = (GridView) findViewById(R.id.gv_memory);
            myimage.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    myimage.setImageResource(pictures.get(position));
                    // View v1 = new View(context);
                    if (flage == false) {

                        img1 = pictures.get(position);
                        // v1 = arg2.getChildAt(position);
                        save1 = position;
                        flage = true;

                    } else if (flage == true) {

                        img2 = pictures.get(position);
                        save2 = position;
                        checkResult(save1, save2);
                        flage = false;
                    }
                    // else if(f)
                }
            });

            return myimage;
        }

    }

    public void checkResult(int s1, int s2) {
        if (img1 == img2) {
            pictureList.remove(s1); //this is line no 116
            pictureList.remove(s1);
            adapter.notifyDataSetChanged();
            Toast.makeText(MainActivity.this, "Congratualatin !!!!",
                    Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(MainActivity.this, "Sorry!!!!", Toast.LENGTH_LONG)
                    .show();
            final GridView grid = (GridView) findViewById(R.id.gv_memory);
            grid.setAdapter(new GridViewContent(this));
        }

    }
}      

日志猫。

03-14 01:07:12.791: D/dalvikvm(1598): GC_FOR_ALLOC freed 38K, 7% free 2771K/2980K, paused 183ms, total 185ms
03-14 01:07:12.811: I/dalvikvm-heap(1598): Grow heap (frag case) to 3.943MB for 1127536-byte allocation
03-14 01:07:12.941: D/dalvikvm(1598): GC_FOR_ALLOC freed 2K, 6% free 3870K/4084K, paused 128ms, total 128ms
03-14 01:07:13.111: D/dalvikvm(1598): GC_FOR_ALLOC freed 4K, 5% free 4253K/4448K, paused 25ms, total 26ms
03-14 01:07:13.143: I/dalvikvm-heap(1598): Grow heap (frag case) to 5.688MB for 1440016-byte allocation
03-14 01:07:13.271: D/dalvikvm(1598): GC_FOR_ALLOC freed <1K, 4% free 5659K/5856K, paused 127ms, total 127ms
03-14 01:07:13.481: I/Choreographer(1598): Skipped 49 frames!  The application may be doing too much work on its main thread.
03-14 01:07:13.571: D/gralloc_goldfish(1598): Emulator without GPU emulation detected.
03-14 01:08:36.011: D/dalvikvm(1598): GC_FOR_ALLOC freed 357K, 9% free 5587K/6116K, paused 34ms, total 35ms
03-14 01:08:36.021: I/dalvikvm-heap(1598): Grow heap (frag case) to 6.543MB for 971296-byte allocation
03-14 01:08:36.154: D/dalvikvm(1598): GC_FOR_ALLOC freed 1K, 8% free 6534K/7068K, paused 123ms, total 123ms
03-14 01:08:39.422: D/dalvikvm(1598): GC_FOR_ALLOC freed 2385K, 8% free 5419K/5876K, paused 76ms, total 78ms
03-14 01:08:39.492: D/dalvikvm(1598): GC_FOR_ALLOC freed 1K, 4% free 5654K/5876K, paused 40ms, total 41ms
03-14 01:08:41.352: D/AndroidRuntime(1598): Shutting down VM
03-14 01:08:41.352: W/dalvikvm(1598): threadid=1: thread exiting with uncaught exception (group=0x41465700)
03-14 01:08:41.532: E/AndroidRuntime(1598): FATAL EXCEPTION: main
03-14 01:08:41.532: E/AndroidRuntime(1598): java.lang.NullPointerException
03-14 01:08:41.532: E/AndroidRuntime(1598):     at com.example.memoryforkids.MainActivity.checkResult(MainActivity.java:116)
03-14 01:08:41.532: E/AndroidRuntime(1598):     at com.example.memoryforkids.MainActivity$GridViewContent$1.onClick(MainActivity.java:102)
03-14 01:08:41.532: E/AndroidRuntime(1598):     at android.view.View.performClick(View.java:4240)
03-14 01:08:41.532: E/AndroidRuntime(1598):     at android.view.View$PerformClick.run(View.java:17721)
03-14 01:08:41.532: E/AndroidRuntime(1598):     at android.os.Handler.handleCallback(Handler.java:730)
03-14 01:08:41.532: E/AndroidRuntime(1598):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-14 01:08:41.532: E/AndroidRuntime(1598):     at android.os.Looper.loop(Looper.java:137)
03-14 01:08:41.532: E/AndroidRuntime(1598):     at android.app.ActivityThread.main(ActivityThread.java:5103)
03-14 01:08:41.532: E/AndroidRuntime(1598):     at java.lang.reflect.Method.invokeNative(Native Method)
03-14 01:08:41.532: E/AndroidRuntime(1598):     at java.lang.reflect.Method.invoke(Method.java:525)
03-14 01:08:41.532: E/AndroidRuntime(1598):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
03-14 01:08:41.532: E/AndroidRuntime(1598):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
03-14 01:08:41.532: E/AndroidRuntime(1598):     at dalvik.system.NativeStart.main(Native Method)

main.xml

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gv_memory"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:columnWidth="90dp"
    android:gravity="center"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:stretchMode="columnWidth"
    android:verticalSpacing="10dp" >

</GridView>      

提前致谢..

最佳答案

好吧,我发现了这个错误,你在两个地方定义了 pictureList 变量,在适配器类中初始化的一个是局部变量。当调用 checkResult 时,它使用属于主 Activity 类的 pictureList 变量。执行以下操作:

1) 删除适配器类中的局部变量。 2) 初始化activity类中已经定义的pictureList变量。

这修复了错误。现在在我的机器上运行良好!

此外,您使用的逻辑存在很多问题,一旦修复此错误,您就会意识到。

关于java - 如果两个项目具有相同的图像,则在运行时删除 GridView 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22396336/

相关文章:

Android,以抽屉和谷歌地图为 fragment 的主要 Activity

Java Scanner.hasNextLine() 未检测到空行?

java - 尝试打印桥牌游戏时出现空错误

java - 如何每帧多次重绘 JFrame 及其组件?

java - OnListItem点击打开一个新的Fragment

android - 在 React Native Android 上定义自定义原生事件

java - FindBugs 和静态初始化顺序

java - 如何更新印度铁路网站中添加的 PNR 验证码

android - 在安卓中设置背景颜色

android - 将横幅放在选项卡主机下方,仅用于一项 Activity