ListView .putExtra dari Kolom DB

Saya mencoba mendapatkan data dari kolom db yang berisi tautan URL; Nama kolomnya adalah 'goto' dengan di db. Saya perlu meneruskan ini ke Intent onItemClick saya di ListView saya untuk memuat halaman web ke dalam Aktivitas baru/berikutnya.

Saya tidak tahu bagaimana agar ini berfungsi. Jika berkenan tunjukkan modifikasi kode beserta penjelasannya, ini akan sangat membantu saya dalam belajar. Terima kasih!

DIPERBAIKI:

Saya sekarang menerima data tetapi metode saya mengembalikan ID baris yang salah. Saya merevisi Aktivitas di bawah ini. Tolong bantu. Terima kasih

Dalam Aktivitas saya .onCreate (REVISI):

final ListView lv = getListView();
lv.setTextFilterEnabled(true);
    lv.setOnItemClickListener(new OnItemClickListener() {
        // @Override
        public void onItemClick(AdapterView<?> a, View v, int position,long id) 
        {
            Object o = lv.getSelectedItem();
            //Adapter_AC fullObject = (Adapter_AC)o;

            String url = "gotoURL";
            if(v != null) {
                TextView tv = (TextView)lv.findViewById(R.id.dummy);
                url = (String) tv.getTag();
            }

            Toast.makeText(List_AC.this, "Clicked: " +  url, Toast.LENGTH_LONG).show();
            Intent i = new Intent(List_AC.this, DocView.class);

            i.putExtra("url", url);
            startActivity(i);
        }
    });

Adaptor Saya:

public class Adapter_AC extends SimpleCursorAdapter {
private Cursor dataCursor;

private LayoutInflater mInflater;

public Adapter_AC(Context context, int layout, Cursor dataCursor,
        String[] from, int[] to) {
    super(context, layout, dataCursor, from, to);
    this.dataCursor = dataCursor;
    mInflater = LayoutInflater.from(context);
}

public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder holder;

    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.list_item, null);

        holder = new ViewHolder();
        holder.text1 = (TextView) convertView.findViewById(R.id.label);
        holder.text2 = (TextView) convertView.findViewById(R.id.listTitle);
        holder.text3 = (TextView) convertView.findViewById(R.id.caption);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    dataCursor.moveToPosition(position);

    int label_index = dataCursor.getColumnIndex("label");
    String label = dataCursor.getString(label_index);

    int title_index = dataCursor.getColumnIndex("title");
    String title = dataCursor.getString(title_index);

    int description_index = dataCursor.getColumnIndex("description");
    String description = dataCursor.getString(description_index);

    int goto_index = dataCursor.getColumnIndex("goto");
    String gotoURL = dataCursor.getString(goto_index);

    holder.text1.setText(label);
    holder.text2.setText(title);
    holder.text3.setText(description);

    return convertView;
}

static class ViewHolder {
    TextView text1;
    TextView text2;
    TextView text3;
}
}

person Community    schedule 30.04.2011    source sumber
comment
@anticafe ada ide tentang kesalahan saya? Terima kasih   -  person    schedule 03.05.2011


Jawaban (3)


Coba gunakan setTag:
Pertama, kita setel tag:

...
holder.text3.setText(description);
holder.text3.setTag(gotoURL);

Dan saat melakukan acara onClick, dapatkan tag:

public void onItemClick(AdapterView<?> a, View v, int position,long id) 
{
    ...
    String url = "";
    if(v != null) {
        TextView tv = (TextView)arg1.findViewById(R.id.caption);
        url = (String) tv.getTag();
    }
    i.putExtra("url", url);
    startActivity(i);
}
person anticafe    schedule 30.04.2011
comment
Terima kasih itu sangat membantu. Satu-satunya masalah yang saya miliki sekarang adalah menarik data dari baris DB yang salah. Apa pun listItem yang dipilih, ia mengembalikan kolom yang benar dari baris yang sama. Saya yakin saya melewatkan sesuatu. Bantuan apa pun akan dihargai. terima kasih! - person ; 03.05.2011

Dalam metode OnItemClickListener.onItemClick, ada argumen id, saat Anda menggunakan SimpleCursorAdapter, id, yaitu kolom _ID di database sqlite, item yang dipilih akan diteruskan ke argumen id, sehingga Anda bisa mendapatkan kolom yang dipilih dari DB dengan id ini nilai.

Berikut contoh kodenya, semoga dapat membantu.

public void onItemClick(AdapterView<?> a, View v, int position, long id) {
    Cursor c = queryById(id);
    // Get the url from DB.
    String url = c.getString("url");
}
person Tony    schedule 30.04.2011

Alasan Anda mengambil data dari baris yang salah adalah karena Anda salah menangani parameter convertView. Anda hanya mengatur holder untuk menunjuk pada kumpulan TextView objek pertama yang Anda siapkan. Saya pikir konsep holder Anda tidak diperlukan. Hilangkan itu, setel bidang teks secara eksplisit setiap kali, gunakan Cursor seperti yang saya sebutkan di pertanyaan Anda sebelumnya.

person Brian Dupuis    schedule 03.05.2011