我一直在尝试按照Android教程进行操作,并坚持使用Grid View Tutorial。
我从本教程复制了main.xml,onCreate方法和ImageAdapter类的代码。但是,我遇到了几个错误,第一个是“无法从View转换为GridView”。
我在网上搜索了一个解决方案,大多数遇到类似错误的人通过正确的导入解决了这个问题。我使用Eclipse并使用其“CTRL + SHIFT + O”进行自动导入。
所以这是我的GridView.java
package com.example.hellogridview;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Toast;
public class GridView 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();
}
});
}
}
这是我的ImageAdapter.java
package com.example.hellogridview;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
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
};
}
最后,main.xml
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
谁能告诉我我做错了什么?感谢。
答案 0 :(得分:3)
输入冲突。
你的Activity不能有名称GridView,因为它与android.widget.GridView冲突。编译器认为你想要转换为GridView扩展Activity,而不是widget类。
解决方案:
android.widget.GridView gridview = (android.widget.GridView) findViewById(R.id.gridview);
答案 1 :(得分:0)
由于我找到了一些方法来使这个教程发挥作用(感谢老鼠的回答),我想给出我自己的详细答案,以防其他刚开始使用Android教程的人遇到同样的问题。< / p>
总之两个主要问题是将Activity命名为“HelloGridVIew”并删除“import.android.R;”在这两个课程中。以下是我所做的更详细的描述。
1
创建Android应用程序时,如何正确命名活动以避免名称冲突和其他问题非常重要。即,在Eclipse中执行File-&gt; New-&gt; Android Project。然后按照教程中的建议输入项目名称“HelloGridVIew”。我选择的项目名称是
com.example.hellogridview
然后,Eclipse会自动使用“HelloGridVIewActivity”填充“创建活动”字段。但重要的是将其更改为“HelloGridVIew”,因为本教程中的代码隐式假设此活动,即在onCreate()方法的这一行中
Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
2
从HelloGridView.java中的教程中复制粘贴onCreate()方法。
3
创建一个名为ImageAdapter的新类(File-&gt; New-&gt; Class),并从教程中复制粘贴相应的代码。
4
在HelloGridView.java和ImageAdapter.java中按CTRL + SHIFT + O.这将使Eclipse导入必要的东西。但是,在这两个类的这一步中,Eclipse都会导入以下内容
import android.R;
这是不正确的。从这两个类中删除此行。在询问此问题之前,我在stackoverflow上找到了这一步。
这使我的例子工作。希望这也可以帮助其他人。