2017-06-29 62 views
1

我想用我的游标适配器使用viewHolder来显示来自SQLITE数据库的一些数据。如何在我的CursorAdapter中使用ViewHolder?

我搜索了一些解决方案,但我不明白如何在此示例中使用de viewHolder。

任何人都可以帮助我吗? 这是我的代码:

public class MainActivity extends AppCompatActivity { 
FilmDbAdapter mDbHelper; 
Cursor FilmsCursor; 
String[] arrayTitulo,arrayAno,arrayDirector; 
Integer [] arrayPoster; 


@Override 
protected void onCreate (Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.list);// 
    fillData(); 


} 

public class CursorDemo extends CursorAdapter { 

    public CursorDemo(Context context, Cursor c) { 

     super(context, c , false); 
     // TODO Auto-generated constructor stub 
    } 


    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
     // TODO Auto-generated method stub 

     TextView title = (TextView) view.findViewById(R.id.txtViewTitulo); 
     TextView dir = (TextView) view.findViewById(R.id.txtViewDirector); 
     TextView anio = (TextView) view.findViewById(R.id.txtViewAno); 
     ImageView img = (ImageView) view.findViewById(R.id.imgPoster); 

     title.setText(cursor.getString(cursor.getColumnIndex("film"))); 
     dir.setText(cursor.getString(cursor.getColumnIndex("director"))); 
     anio.setText(cursor.getString(cursor.getColumnIndex("ano"))); 

     Context c = getApplicationContext(); 
     String nom = (cursor.getString(cursor.getColumnIndex("img"))); 
     int idimg = c.getResources().getIdentifier(nom,"mipmap" ,c.getPackageName()); 
     img.setImageResource(idimg); 
    } 

    @Override 
    public void changeCursor(Cursor cursor) { 
     // TODO Auto-generated method stub 
     super.changeCursor(cursor); 
    } 

    @Override 
    public View newView(Context context , Cursor cursor, ViewGroup viewGroup) { 
     // TODO Auto-generated method stub 
     LayoutInflater inflater = LayoutInflater.from(context); 
     View view = inflater.inflate(R.layout.row, viewGroup ,false); 

     return view; 
    } 

} 


private void fillData(){ 

    mDbHelper = new FilmDbAdapter(this); 
    mDbHelper.open(); 
    FilmsCursor = mDbHelper.fetchAll("hero"); 
    final CursorDemo cursorDemo = new CursorDemo(MainActivity.this, FilmsCursor); 
    ListView lstViewPelis = (ListView) findViewById(R.id.lstViewPelis); 
    lstViewPelis.setAdapter(cursorDemo); 
} 



public static class viewHolder { 
    TextView Ano,Director; 


    viewHolder(View row){ 
     this.Ano = (TextView) row.findViewById(R.id.txtViewAno); 
     this.Director = (TextView) row.findViewById(R.id.txtViewDirector); 
    } 
} 

}

回答

2

的CursorAdapter不会叫NewView的每次需要一个新行时间;如果它已经有一个View,它将调用bindView,所以创建的视图实际上被重用。所以更新这些方法根据您的要求

@Override 
public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    LayoutInflater inflater = LayoutInflater.from(context); 
    View view = inflater.inflate(R.layout.row, viewGroup ,false);   

    viewHolder holder = new viewHolder(view); 
    view.setTag(holder); 

    return v; 
} 

@Override 
public void bindView(View view, Context context, Cursor cursor) { 
    // TODO Auto-generated method stub 


    viewHolder holder = (viewHolder)view.getTag(); 

    holder.title.setText(cursor.getString(cursor.getColumnIndex("film"))); 
    //......follow all 

    Context c = getApplicationContext(); 
    String nom = (cursor.getString(cursor.getColumnIndex("img"))); 
    int idimg = c.getResources().getIdentifier(nom,"mipmap" ,c.getPackageName()); 
    //................... 
} 
+0

这就是!它工作很好!!!!!!!代码和解释。 ! – Kargol

相关问题