2012-04-09 9 views
0

Ich habe viele Fragen durchforstet, aber sie fragen nicht und beantworten nicht, wonach ich suche, also hier ist, was ich versuche zu tun. Bisher habe ich ein Projekt, in dem ich eine vor-gefüllte Datenbank, mit einer Tabelle, die 6 Spalten von Daten enthält, die Haupt-XML zeigt nur die Listenansicht, ich verwende einen Adapter, Cursor, SQLiteHelper etc. alles funktioniert gut und zeigt meine benutzerdefinierte itemlist.xml alles gut, jetzt in jedem Element der Liste zeige ich nur 3 Dinge (zweite, vierte und fünfte Spalte Daten) von jedem Datensatz (sie alle enthalten 6 coluns wie ich schon erwähnt), ich möchte sein Mit einem onclickitemlistener können Sie die Daten aus der dritten Spalte für diesen Artikel anzeigen, wie kann ich das erreichen? Ich bin in der Lage, die Liste Artikel-ID angezeigt zu bekommen, so kann mir hier jemand helfen, Dank hier ist som Code: -Code von y HaupttätigkeitWie kann ich ein Element in einer bestimmten Zeile in einer Liste aus einer Datenbank abrufen?

public class DBlistActivity extends Activity { 

private mediosHelper dbmediosHelper = null; 
private Cursor ourCursor = null; 
FancyAdapter adapter = null; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ListView myListView = (ListView) findViewById(R.id.mylistView); 

    dbmediosHelper = new mediosHelper(this); 
    try { 
     dbmediosHelper.createDataBase(); 
} catch (IOException ioe) { 
    throw new Error("Unable to create database"); 
} 
try { 
    dbmediosHelper.openDataBase(); 
}catch(SQLException sqle){ 
    throw sqle; 
} 
try { 
ourCursor = dbmediosHelper.getCursor(); 
startManagingCursor(ourCursor); 
}catch(SQLException sqle){ 

    throw sqle; 

} 

adapter = new FancyAdapter(ourCursor); 
myListView.setAdapter(adapter); 

myListView.setOnItemClickListener(onListClick); 

} 

class FancyAdapter extends CursorAdapter { 
     FancyAdapter(Cursor c) { 
       super (DBlistActivity.this, c); 
     } 
       public void bindView(View row, Context ctxt, Cursor c) { 
        ViewHolder holder = (ViewHolder) row.getTag(); 
        holder.populateForm(c, dbmediosHelper); 
} 
       public View newView(Context ctxt, Cursor c, ViewGroup parent){ 
        LayoutInflater inflater = getLayoutInflater(); 
        View row = inflater.inflate(R.layout.listitem, parent, false); 
        ViewHolder holder = new ViewHolder(row); 
        row.setTag(holder); 
        return(row); 
       } 
} 

class ViewHolder{ 
    public TextView nombre=null; 
    public TextView estado=null; 
    public TextView ciudad=null; 
    ViewHolder (View row){ 
     nombre = (TextView) row.findViewById(R.id.medioName); 
     estado = (TextView) row.findViewById(R.id.medioEstado); 
     ciudad = (TextView) row.findViewById(R.id.medioCiudad); 
    } 
    void populateForm(Cursor c, mediosHelper r){ 
     nombre.setText(r.getName(c)); 
     estado.setText(r.getEstado(c)); 
     ciudad.setText(r.getCiudad(c)); 
    } 
} 

private AdapterView.OnItemClickListener onListClick=new AdapterView.OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
     Toast.makeText(getApplicationContext(), String.valueOf(id), Toast.LENGTH_SHORT) .show();  
    } 
}; 

Und von meinem mediosHelper

public Cursor getCursor() { 
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); 
    queryBuilder.setTables(TABLE_NAME); 
    String[] asColumsToReturn = new String[] { COLUMN_ID, COLUMN_CODE, COLUMN_NAME, COLUMN_URL, COLUMN_ESTADO, COLUMN_CIUDAD}; 
    Cursor mCursor = queryBuilder.query(myDataBase, asColumsToReturn, null, null, null, null, null); 
    return mCursor; 
} 
public CharSequence getId(Cursor c) { 
    return (c.getString(0)); 
} 
public CharSequence getCode(Cursor c) { 
    return (c.getString(1)); 
} 
public String getName(Cursor c){ 
    return(c.getString(2)); 
} 
public String getUrl(Cursor c) { 
    return (c.getString(3)); 
} 
public String getEstado(Cursor c) { 
    return (c.getString(4)); 
} 
public String getCiudad(Cursor c) { 
    return (c.getString(5)); 
} 

Antwort

1

Sie müssen den Cursor, den Sie verwendet haben, um den Adapter zu füllen. Sobald Sie dies haben, verschieben Sie es an die Position, die Sie in der onItemClickedCallback mit c.moveToPosition (Position) erhalten. Als Sie haben Zugriff auf alle Spalten (cursor.getColumnIndex ("_ id"))

EDIT:

class MyActivity extends Activity implements OnItemClickListener{ 
FancyAdapter adapter = null; 
... 

adapter = new FancyAdapter(ourCursor); 
myListView.setAdapter(adapter); 

myListView.setOnItemClickListener(this); 

@Override 
public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
    // TODO Auto-generated method stub 
Cursor c = adapter.getCursor(); 
    c.moveToPosition(position); 
    int id = c.getInt(c.getColumnIndex("_id"); 
} 
} 
+0

Linder, könnten Sie ein wenig präziser bitte, sein (Sie den Cursor erhalten müssen Sie gewohnt fülle den Adapter) meinst du etwas wie diese öffentliche String getUrl (Cursor c) { Rückkehr (c.getString (3)); im Helfer? und wenn es so ist, wie gebe ich die _id? } – zvzej

+0

irgendwo in Ihrem Code füllen Sie instanziieren Sie Ihren FancyAdapter mit einem Cursor als Argument. Sie müssen diese Instanz in Ihren Callback holen und 'getCursor' auf Ihrem Adapter aufrufen und dann wie oben beschrieben. –

+0

Lindener, könntest du mir ein Beispiel geben, wo und wie ich das in meinen Code schreibe, thaks. – zvzej

Verwandte Themen