2011-11-07 36 views
0

我在我的应用程序中放置了一个gridview,并且显示信息。正如你可以看到我对每平方米的索引号的顶部,开始为0。当我滚动我的屏幕,我的号码开始17后改变指数再次启动0和倒退在GridView中显示项目的问题

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

这里是我的代码:

(的onCreate功能)

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

我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(以不同的分辨率)时,问题开始于不同的索引号 感谢您的帮助

回答

0

我认为你的问题是在getView。当你检查(convertView == NULL),就无法正确reinflate非空的观点,但你不能为它提供任何新的内容

移动

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语句之外。

+0

谢谢!我不知道如何运作的reinflate视图! – jukx

+0

Listview可以回收项目视图,这样就不会不必要地执行从XML重新注入的昂贵操作。当列表项脱离屏幕时,其视图可以作为convertView传递到Adapter.getView中,以供重用。正如你现在所知道的那样,无论如何你都需要提供新的价值,否则事情会变得有点怪异。 –

0

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