Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
谷歌android官方GridView教程_Android_Gridview_Baseadapter - Fatal编程技术网

谷歌android官方GridView教程

谷歌android官方GridView教程,android,gridview,baseadapter,Android,Gridview,Baseadapter,目前我正在看 我在onCreate()、onResume和getView()中创建了带有其他日志的测试项目: HelloGridViewActivity.java package com.hello.namespace; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterVie

目前我正在看 我在onCreate()、onResume和getView()中创建了带有其他日志的测试项目:

HelloGridViewActivity.java

package com.hello.namespace;

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

public class HelloGridViewActivity extends Activity {
    private static final String TAG = "HelloGridViewActivity";

    /** 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(HelloGridViewActivity.this, "" + position, Toast.LENGTH_SHORT).show();
            }
        });

        Log.e(TAG, "onCreate()");
    }

    protected void onResume() {
        super.onResume();

        Log.e(TAG, "onResume()");
    }
}
日志输出:

05-23 08:59:13.541: E/HelloGridViewActivity(733): onCreate()
05-23 08:59:13.551: E/HelloGridViewActivity(733): onResume()
05-23 08:59:13.711: E/ImageAdapter(733): position = 0
05-23 08:59:14.380: E/ImageAdapter(733): position = 1
05-23 08:59:15.190: E/ImageAdapter(733): position = 2
05-23 08:59:15.771: E/ImageAdapter(733): position = 3
05-23 08:59:16.340: E/ImageAdapter(733): position = 4
05-23 08:59:17.141: E/ImageAdapter(733): position = 5
05-23 08:59:17.721: E/ImageAdapter(733): position = 6
05-23 08:59:18.330: E/ImageAdapter(733): position = 7
05-23 08:59:18.611: E/ImageAdapter(733): position = 8
05-23 08:59:18.631: E/ImageAdapter(733): position = 9
05-23 08:59:18.631: E/ImageAdapter(733): position = 10
05-23 08:59:18.651: E/ImageAdapter(733): position = 11
05-23 08:59:18.651: E/ImageAdapter(733): position = 12
05-23 08:59:18.671: E/ImageAdapter(733): position = 13
05-23 08:59:18.681: E/ImageAdapter(733): position = 14
05-23 08:59:18.691: E/ImageAdapter(733): position = 15
05-23 08:59:18.701: E/ImageAdapter(733): position = 16
05-23 08:59:18.721: E/ImageAdapter(733): position = 17
05-23 08:59:18.721: E/ImageAdapter(733): position = 18
05-23 08:59:18.741: E/ImageAdapter(733): position = 19
05-23 08:59:18.741: E/ImageAdapter(733): position = 20
05-23 08:59:18.891: E/ImageAdapter(733): position = 0
这里有两个问题:

  • 为什么位置0处的ImageView创建了两次

  • 假设我想对ImageView做些什么。我会创建ImageView数组,在getView()中初始化它的元素,但我不能在onCreate()或onResume()中使用它,因为ImageView还不存在!我该怎么办


  • 对不起,我的英语不好。

    1:我假设您在列表中滚动以获取此日志(因为只有当视图可见时才会调用getView),因此很可能您只是再次向上滚动,位置0处的视图是从上到下滚动的,并且再次从上到下滚动


    2:取决于您希望在
    onCreate
    onResume
    中查看视图的原因。如果没有其他解决方案,并且您必须拥有它们,那么您只需在
    onCreate
    中自己创建所有视图,将它们保存在列表中,然后在getView中返回即可。我会尽量避免这种情况,因为ListView仅在存在可见视图时才恢复视图并重用它们。在我描述的实现中,您将失去此功能,因此请告诉我们,为什么要在
    getView

    1之前将其包含在其中。我并没有滚动,但最后一个图像是不可见的(它在屏幕的下边框下方)。这有关系吗?2.我想在应用程序启动时为第一行中的图像添加彩色边框。很抱歉,我没有看到,只有当convertView==null时才能登录。这使得我的第一个假设不可能。我不知道,为什么这个被多次调用,对我来说没有任何意义。对于您的第二个问题:我会在
    getView()
    中创建彩色边框,并检查您是否在第一行中。。。
    05-23 08:59:13.541: E/HelloGridViewActivity(733): onCreate()
    05-23 08:59:13.551: E/HelloGridViewActivity(733): onResume()
    05-23 08:59:13.711: E/ImageAdapter(733): position = 0
    05-23 08:59:14.380: E/ImageAdapter(733): position = 1
    05-23 08:59:15.190: E/ImageAdapter(733): position = 2
    05-23 08:59:15.771: E/ImageAdapter(733): position = 3
    05-23 08:59:16.340: E/ImageAdapter(733): position = 4
    05-23 08:59:17.141: E/ImageAdapter(733): position = 5
    05-23 08:59:17.721: E/ImageAdapter(733): position = 6
    05-23 08:59:18.330: E/ImageAdapter(733): position = 7
    05-23 08:59:18.611: E/ImageAdapter(733): position = 8
    05-23 08:59:18.631: E/ImageAdapter(733): position = 9
    05-23 08:59:18.631: E/ImageAdapter(733): position = 10
    05-23 08:59:18.651: E/ImageAdapter(733): position = 11
    05-23 08:59:18.651: E/ImageAdapter(733): position = 12
    05-23 08:59:18.671: E/ImageAdapter(733): position = 13
    05-23 08:59:18.681: E/ImageAdapter(733): position = 14
    05-23 08:59:18.691: E/ImageAdapter(733): position = 15
    05-23 08:59:18.701: E/ImageAdapter(733): position = 16
    05-23 08:59:18.721: E/ImageAdapter(733): position = 17
    05-23 08:59:18.721: E/ImageAdapter(733): position = 18
    05-23 08:59:18.741: E/ImageAdapter(733): position = 19
    05-23 08:59:18.741: E/ImageAdapter(733): position = 20
    05-23 08:59:18.891: E/ImageAdapter(733): position = 0