0

저는 Android app을 개발 중이며 ListView에 데이터베이스의 일부 데이터를 제목 및 자막으로 표시하려고합니다. SimpleCursorAdapter를 확장하는 어댑터를 수행했지만 작동하지만 2 개의 첫 번째 필드와 BindView 메서드에서 선택하지 않은 부분을 보여줍니다.어댑터가 올바른 문자열을 표시하지 않습니다.

package com.apeirons.apeironsdatabasemanager; 

import android.content.Context; 
import android.database.Cursor; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.SimpleCursorAdapter; 
import android.widget.TextView; 

public class MyListAdapter extends SimpleCursorAdapter { 

    //private Context context; 
    LayoutInflater inflater; 

    @SuppressWarnings("deprecation") 
    public MyListAdapter(Context context, int layout, Cursor c, String[] from, 
      int[] to) { 
     super(context, R.layout.consult, c, from, to); 
     inflater = LayoutInflater.from(context); 
    } 


    public void bindview (View view, Context context, Cursor cursor){ 
     TextView titulo = (TextView)view.findViewById(R.id.Titulo); 
     titulo.setText(cursor.getString(cursor.getColumnIndex("name"))); 

     TextView subtitulo = (TextView)view.findViewById(R.id.SubTitulo); 
     subtitulo.setText(cursor.getString(cursor.getColumnIndex("kind_place"))); 

     subtitulo.append(cursor.getString(cursor.getColumnIndex("score"))); 
    } 


    @Override 
    public View newView (Context context, Cursor cursor, ViewGroup parent){ 

     View v = inflater.inflate(R.layout.entrys, parent, false);  
     return v; 
    } 
} 

: 그래서 어댑터의 코드입니다 미안 오류를 찾기 위해 노력하지만 난 할수 없어, 아마 정말 멍청한 짓을 키우면하지만 오류가 :-) 직접 찾기 위해 정말 열심히이다 여기 어댑터를 사용하는 곳이 있습니다 :

package com.apeirons.apeironsdatabasemanager; 

import android.app.Activity; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.ListView; 

public class Consult extends Activity { 
    private ListView list; 
    private SQLiteDatabase db; 

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

     list = (ListView)findViewById(R.id.list); 

     this.getIntent(); 

     ApeironsSQLiteHelper apeironsdb = new ApeironsSQLiteHelper(this, "DBApeirons.DB", null, 1); 

     db = apeironsdb.getReadableDatabase(); 

     String[] campos = new String[]{"_id", "name", "kind_place", "score"}; 

     Cursor c = db.query("Apeirons", campos, null, null, null, null, null); 

     int cuenta = c.getCount(); 

     c.moveToFirst(); 

     Log.d("CONSULTA", Integer.toString(cuenta)); 

     Log.d("CURSOR", c.getString(c.getColumnIndex("score"))); 

     String[] from = new String[]{"name", "kind_place", "score"}; 

     int [] to = new int[] {R.id.Titulo, R.id.SubTitulo}; 

     //@SuppressWarnings("deprecation") 
     MyListAdapter myadapter = new MyListAdapter (this, 
       R.layout.entrys, c, from, to); 

     list.setAdapter(myadapter); 

    } 

} 

정말 고맙습니다.

+1

코드에 몇 가지 다른 문제가 있습니다. A) 사용하는 생성자는 사용하지 말아야합니다. 비추천 경고에는 이유가 있습니다. B)'from'' to'매핑을 사용하지 않는다면'SimpleCursorAdaper'를 사용할 필요가 없습니다 (사용하고자한다면'newView' /'bindView'를 오버라이드하지 마십시오) - A 간단한'CursorAdapter' 만 있으면 충분합니다. C) ViewHolder 패턴 사용을 고려해야하므로 뷰를 업데이트 할 때마다 findViewById를 사용할 필요가 없습니다. 'findViewById'는 성능을 떨어 뜨립니다. http://pastebin.com/AUCWF6ut에서 이러한 문제를 수정합니다. – zapl

답변

1

SimpleCursorAdapter의 메서드를 재정의하지 않지만 아무 것도 호출되지 않는 bindview (대문자가 아닌!) 메서드를 정의합니다.

새 메서드가 public 클래스에서 public이므로 컴파일러에서 사용하지 않는다는 경고를받지 않습니다. @Override 주석을 사용한 경우 컴파일러는 실제로 메서드를 재정의하지 않는다고 경고했을 것입니다 ...

+0

hehe 멋진 찾기 :) – Selvin

+0

@ 패트릭 정말 당신이 무시하는 것을 잊어 버리고 컴파일러가 나에게 오류를 보여주지 않았고, 나는 'bindView'라고 쓰지 않는 것을 알지 못했다. 이제 완벽하게 작동합니다. 감사. –

+0

@zapl 감사합니다. 단지'bindView'를 재정의하는 것이 효과가 있지만, 저는 여러분의 충고를 따르고'CursorAdapter'를 사용하여 더 잘 수행하려고 노력할 것입니다. –

관련 문제