ListView .putExtra из столбца БД - PullRequest
0 голосов
/ 30 апреля 2011

Я пытаюсь получить данные из столбца БД, содержащего ссылку URL; Имя столбца «Перейти» с БД. Мне нужно передать это в мой OnItemClick Intent в ListView, чтобы загрузить веб-страницу в новое / следующее действие.

Я не знаю, как заставить это работать. Если вы можете показать изменения кода с объяснением, это было бы очень полезно для изучения. Thnx!

REVISED:

Я сейчас передаю данные, но мой метод возвращает неправильный идентификатор строки. Я пересмотрел ниже активность. Любая помощь плз. Thnx

В моей деятельности .onCreate (ПЕРЕСМОТРЕНО):

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);
        }
    });

Мой адаптер:

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;
}
}

Ответы [ 3 ]

1 голос
/ 30 апреля 2011

В методе OnItemClickListener.onItemClick есть аргументы id, а при использовании SimpleCursorAdapter идентификатор (столбец _ID в базе данных sqlite) выбранного элемента будет передан в аргумент id Таким образом, вы можете получить выбранный столбец из БД с этим значением id.

Ниже приведен пример кода, надеюсь, он может помочь.

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");
}
1 голос
/ 30 апреля 2011

Попробуйте использовать setTag:
Сначала мы устанавливаем тег:

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

А когда выполняем событие onClick, получаем тег:

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);
}
0 голосов
/ 03 мая 2011

Причина, по которой вы извлекаете данные из неправильной строки, заключается в том, что вы неправильно обрабатываете параметр convertView. Вы только когда-либо устанавливаете holder, чтобы он указывал на самый первый набор TextView объектов, которые вы установили. Я думаю, что ваша holder концепция не нужна. Потеряйте это, устанавливайте текстовые поля явно каждый раз, используйте Cursor, как я упоминал в вашем предыдущем вопросе.

...