为什么Android SDK教程中的代码不能直接使用?

时间:2010-10-06 22:16:27

标签: android sdk

我在这里错过了什么吗?

我完全按照本页面上的说明(以及其他一些教程),但他们似乎总是缺少一些关键信息,因为它们不能开箱即用。

我添加了一堆似乎丢失的软件包,但现在我被卡住了。

http://developer.android.com/resources/tutorials/views/hello-gridview.html

描述资源路径位置类型 转换为Dalvik格式失败,错误1 HelloGrid未知安卓包装问题

每一个drawable.sample_ *引用都有一大堆这些

描述资源路径位置类型 R.drawable.sample_0无法解析ImageAdapter.java / HelloGrid / src / com / example / ImageAdapter第51行Java问题

package com.example.HelloGrid;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

import com.example.ImageAdapter.ImageAdapter;

public class HelloGrid extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));

        gridview.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                Toast.makeText(HelloGrid.this, "" + position, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

package com.example.ImageAdapter;
import android.R;
import android.R.drawable;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class ImageAdapter extends BaseAdapter {
    private Context mContext;

    public ImageAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return mThumbIds.length;
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return 0;
    }

    // create a new ImageView for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {  // if it's not recycled, initialize some attributes
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }

        imageView.setImageResource(mThumbIds[position]);
        return imageView;
    }

    // references to our images
    private Integer[] mThumbIds = {
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7,
            R.drawable.sample_0, R.drawable.sample_1,
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7,
            R.drawable.sample_0, R.drawable.sample_1,
            R.drawable.sample_2, R.drawable.sample_3,
            R.drawable.sample_4, R.drawable.sample_5,
            R.drawable.sample_6, R.drawable.sample_7
    };
}

如您所见,我在/ drawable目录中加载了所有图像 alt text

6 个答案:

答案 0 :(得分:3)

  

描述资源路径位置类型R.drawable.sample_0无法解析ImageAdapter.java / HelloGrid / src / com / example / ImageAdapter第51行Java问题

您缺少可绘制的资源。 instructions supplied in the tutorial中的步骤#2中介绍了这一点。

答案 1 :(得分:2)

删除导入android.R;

这使Eclipses'R;

混乱

这就是它找不到图像的原因。

此外,您只需将其放在res中预先创建的可绘制目录中(例如drawable-hdpi等)

答案 2 :(得分:2)

我也有这个问题,并通过修复此行来解决它:

Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();

Toast.makeText(HelloGridViewActivity.this, "" + position, Toast.LENGTH_SHORT).show();

答案 3 :(得分:1)

我有解决方案:

package com.gridview.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.GridView;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Toast;
import android.widget.BaseAdapter;
import android.content.Context;
import android.view.ViewGroup;
import android.widget.ImageView;


public class HelloGridView extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(this));

        gridview.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
            }
        });
   }



    public class ImageAdapter extends BaseAdapter {
        private Context mContext;

        public ImageAdapter(Context c) {
            mContext = c;
        }

        public int getCount() {
            return mThumbIds.length;
        }

        public Object getItem(int position) {
            return null;
        }

        public long getItemId(int position) {
            return 0;
        }

        // create a new ImageView for each item referenced by the Adapter
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView;
            if (convertView == null) {  // if it's not recycled, initialize some attributes
                imageView = new ImageView(mContext);
                imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
                imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                imageView.setPadding(8, 8, 8, 8);
            } else {
                imageView = (ImageView) convertView;
            }

            imageView.setImageResource(mThumbIds[position]);
            return imageView;
        }

        // references to our images
        private Integer[] mThumbIds = {
                R.drawable.sample_2, R.drawable.sample_3,
                R.drawable.sample_4, R.drawable.sample_5,
                R.drawable.sample_6, R.drawable.sample_7,
                R.drawable.sample_0, R.drawable.sample_1,
                R.drawable.sample_2, R.drawable.sample_3,
                R.drawable.sample_4, R.drawable.sample_5,
                R.drawable.sample_6, R.drawable.sample_7,
                R.drawable.sample_0, R.drawable.sample_1,
                R.drawable.sample_2, R.drawable.sample_3,
                R.drawable.sample_4, R.drawable.sample_5,
                R.drawable.sample_6, R.drawable.sample_7
        };
    }
}

答案 4 :(得分:1)

添加进口为我解决了这个问题 我发现实际上在Eclipse中它们可以自动导入:

“提示:将示例代码粘贴到Eclipse项目后,按Ctrl(或Cmd)+ Shift + O导入所需的包”

希望这可以刷新错过的内容。

答案 5 :(得分:0)

看起来教程缺少一些包信息,但是如果你正在使用eclipse,它应该为你处理大部分内容。