Android Gridview可以在Emulator上运行,但不能在手机上运行



手机和模拟器都是2.2。

正在尝试使用自定义SimpleCursorAdapter类创建网格视图。网格视图包含一个图像和文本视图。

下面的代码在模拟器上运行得很好,但当我在手机上尝试时,什么都没有显示。

我注意到只有构造函数是从电话中调用的(而不是newView或bindView)!有什么帮助吗?

public class GridAdapter extends SimpleCursorAdapter {
       private Context context; 
       private int mLayout;
       public GridAdapter(Context context, int layout, Cursor c,
            String[] from, int[] to) {
           super(context, layout, c, from, to);
           this.context = context;
           mLayout = layout;
        }
       @Override
       public View newView(Context context, Cursor cursor, ViewGroup parent) {
           Cursor c = getCursor();
           final LayoutInflater inflater = LayoutInflater.from(context);
           View v = inflater.inflate(mLayout, null);
           v.setLayoutParams(new GridView.LayoutParams(150,150));

           return v;
       }
       @Override
       public void bindView(View v, Context context, Cursor c) {
           int nameCol = c.getColumnIndex("show_title");
           String name = c.getString(nameCol);

           TextView tv = (TextView) v.findViewById(R.id.textView1);
           if (name != null) {
               tv.setText(name);
           }
           ImageView iv = (ImageView) v.findViewById(R.id.album_image);
           iv.setScaleType(ImageView.ScaleType.CENTER_CROP);
           iv.setImageResource(R.drawable.icon);
       }
    }

这是我的主要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"
/>

以下是我对每个网格位置的看法:

<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"            
  android:id = "@+id/single_item_id"  
  android:layout_width="fill_parent"
 android:layout_height="fill_parent"      
 android:orientation="vertical"
 > 
  <ImageView
  android:id = "@+id/album_image"
  android:adjustViewBounds="true"
  android:layout_width = "fill_parent"             
  android:layout_height="wrap_content"/>
  <TextView 
  android:text="TextView" 
  android:id="@+id/textView1" 
  android:layout_width="fill_parent" 
  android:layout_height="wrap_content"/>
 </LinearLayout>

最后是我的onCreate(好吧,其中一些):

gridview = (GridView) findViewById(R.id.gridview);
Cursor c = mDbHelper.fetchAllShows();
int[] to = new int[] {R.id.name};
GridAdapter ga = new GridAdapter(this,R.layout.icon,c,new String[] {"show_title"},
            to);
gridview.setAdapter(ga);

(是的,我知道我还没有对每个位置内的图像视图做任何处理)。

请浏览以下链接这是网格视图、列表视图等的教程-http://mobiforge.com/designing/story/understanding-user-interface-android-part-3-more-views。让我和你分享我的代码:

main.xml
---------------
     <?xml version="1.0" encoding="utf-8"?>
        <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <GridView
                android:id="@+id/gridv"
                android:layout_width="wrap_content" 
                android:layout_height="fill_parent"
                android:numColumns="auto_fit"
                android:verticalSpacing="10dp"
                android:horizontalSpacing="10dp"
                android:columnWidth="90dp"
                android:stretchMode="columnWidth"
                android:gravity="center"/>
        </FrameLayout>
Gridview.java
------------------------
        public class Gridview extends Activity {
            private  GridView gridview;
            /** Called when the activity is first created. */
            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                gridview = (GridView)findViewById(R.id.gridv);
                gridview.setAdapter(new ImageAdapter(this));
            }
        }

 ImageAdapter.java
    ----------------------
        public class ImageAdapter extends BaseAdapter {
            private int imagpos;
            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(final 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);
                    imageView.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                          Log.d("onClick","position ["+position+"]");
                          imagpos= position;
                        }
                      });
                } else {
                    imageView = (ImageView) convertView;
                }
                imageView.setImageResource(mThumbIds[position]);
                return imageView;
            }
            // references to our images
            private Integer[] mThumbIds = {
                    R.drawable.imag, R.drawable.download,
                    R.drawable.images, R.drawable.imag,
                    R.drawable.images, R.drawable.download
            };

 }

在AndroidManifest.xml中,只添加:<activity android:name=".Gridview" />

我最终接受了Herrmann的建议。我删除了对上下文和光标的引用。还重命名了布局中的gridview,并更改了代码中相应的引用。

相关内容

最新更新