问题在GridView中显示项目

时间:2011-11-07 18:08:36

标签: java android

我在我的应用程序中放了一个gridview,然后显示信息。你可以看到我在每个方格的顶部有索引号,从0开始。当我滚动屏幕时,我的数字在17之后开始改变。索引再次开始0并向后移动

http://img202.imageshack.us/img202/8108/39248258.png

这是我的代码:

(onCreate功能)

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

My BaseAdpater:

public class ImageAdapter extends BaseAdapter
{
   Context MyContext;

   public ImageAdapter(Context _MyContext)
   {
      MyContext = _MyContext;
   }

   @Override
   public int getCount() 
   {
                     /* Set the number of element we want on the grid */
      return searchResult.size();
   }

   @Override
   public View getView(int position, View convertView, ViewGroup parent) 
   {
      View MyView = convertView;

      if ( convertView == null )
      {

         /*we define the view that will display on the grid*/

         //Inflate the layout
         LayoutInflater li = getLayoutInflater();
         MyView = li.inflate(R.layout.item, null);

         String[] myData = searchResult.get(position);

         // Add The Text!!!
         TextView tv = (TextView)MyView.findViewById(R.id.no);
         tv.setText(" "+ position );

         TextView ap = (TextView)MyView.findViewById(R.id.apperture);
         ap.setText(" "+ myData[1] );

         TextView sp = (TextView)MyView.findViewById(R.id.speed);
         sp.setText(" "+ myData[2] );
      }

      return MyView;
   }

   @Override
   public Object getItem(int arg0) {
      // TODO Auto-generated method stub
      return arg0;
   }

   @Override
   public long getItemId(int arg0) {
      // TODO Auto-generated method stub
      return arg0;
   }
}

和item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_height="wrap_content" android:layout_width="wrap_content">
    <LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content">
        <TextView android:id="@+id/no" android:text="1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall"></TextView>
    </LinearLayout>
    <TextView android:text="TextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:id="@+id/apperture"></TextView>
    <TextView android:id="@+id/speed" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView"></TextView>

</LinearLayout>

你见过这个问题吗?当我更改AVD(以不同的分辨率)时,问题以不同的索引号开始 谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

getView方法中,如果convertView为null,则只更新textViews的值。 Android会通过convertView参数将旧视图传递给getView,以便您更高效(重新使用已经膨胀的视图,而不是每次都创建一个新视图)。

答案 1 :(得分:0)

我认为您的问题出在getView中。当你检查是否(convertView == null)时,你没有正确地重新定义非空视图,但是你没有为它提供任何新的内容

移动

String[] myData = searchResult.get(position);

 // Add The Text!!!
 TextView tv = (TextView)MyView.findViewById(R.id.no);
 tv.setText(" "+ position );

 TextView ap = (TextView)MyView.findViewById(R.id.apperture);
 ap.setText(" "+ myData[1] );

 TextView sp = (TextView)MyView.findViewById(R.id.speed);
 sp.setText(" "+ myData[2] );
在你的if语句之外