2011-05-02 52 views
2

如何从我的光标获得一个字符串到我的putExtra调用onItemClick ListView?我需要从我的名为“gotoURL” DB列中的字符串抢进:如何将字符串传入onItemClick ListView?

i.putExtra("Url", ???). 

...我在活动onItemClick的。示例代码将有助于学习。日Thnx!

我的活动有:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.list_view2); 

    final ListView lv = getListView(); 

    activityTitle = (TextView) findViewById(R.id.titleBarTitle); 
    activityTitle.setText("ADVISORY CIRCULATORS"); 

    displayResultList(); 

    lv.setTextFilterEnabled(true); 
    lv.setOnItemClickListener(new OnItemClickListener() { 
     // @Override 
     public void onItemClick(AdapterView<?> a, View v, int position,long id) 
     { 
      Toast.makeText(List_AC.this, "Clicked!", Toast.LENGTH_LONG).show(); 
      Object o = lv.getItemAtPosition(position); 
      Adapter_AC fullObject = (Adapter_AC)o; 
      Intent i = new Intent(List_AC.this, DocView.class); 
      //i.putExtra("url", Adapter_AC.gotoURL); 
      startActivity(i); 
     } 
    }); 
} 

private void displayResultList() { 

    if (android.os.Environment.getExternalStorageState().equals(
      android.os.Environment.MEDIA_MOUNTED)) { 
     extStorageDirectory = Environment.getExternalStorageDirectory() 
       .toString(); 

     File dbfile = new File(extStorageDirectory 
       + "/XXX/XXX/dB/XXX.db"); 

     SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, 
       null); 

     Cursor databaseCursor = db.rawQuery(
       "SELECT * FROM AC_list ORDER BY `label` ASC", null); 

     Adapter_AC databaseListAdapter = new Adapter_AC(this, 
       R.layout.list_item, databaseCursor, new String[] { "label", 
         "title", "description" }, new int[] { R.id.label, 
         R.id.listTitle, R.id.caption }); 

     databaseListAdapter.notifyDataSetChanged(); 
     this.setListAdapter(databaseListAdapter); 

    } else if (android.os.Environment.getExternalStorageState().equals(
      android.os.Environment.MEDIA_UNMOUNTED)) { 
     Log.i("tag", "SDCard is NOT writable/mounted"); 
     Alerts.sdCardMissing(this); 
    } 
} 
} 

我的适配器:

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("gotoURL"); 
    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; 
} 
} 

回答

2

你可以使用CursorAdapter的getItem()方法获取指向当前ID的光标。像这样:

... 
Cursor cursor = adapter.getItem(id); 
i.putExtra("url", cursor.getString(cursor.getColumnIndex("gotoURL"))); 
... 

请注意,我怀疑你需要在你的投影此列,像这样:

Adapter_AC databaseListAdapter = new Adapter_AC(this, 
      R.layout.list_item, databaseCursor, new String[] { "label", 
        "title", "description", "gotoURL" }, new int[] { R.id.label, 
        R.id.listTitle, R.id.caption, R.id.dummy }); 

并为其创建一个虚拟(View.GONE)无形的字段,以便数据被拉入光标。

+0

日Thnx @ColdForged我想你,但我不知道如何处理“适配器”变量@ Cursor游标。 – CelticParser 2011-05-02 22:37:08

+0

这就是你的'databaseListAdapter'。也许把它保存在一个班级领域?也许用'lv.getAdapter()'从ListView中获取它?无论哪种方式应该足够。 – 2011-05-03 14:46:25

+0

Thnx,我把它连接到它昨天,并部分使用你的想法。我现在遇到数据来自错误的DB行的问题。 [看到这个问题](http://stackoverflow.com/q/5838765/600984)。 Thnx再次。 – CelticParser 2011-05-03 17:42:00

1

您可以尝试使用在ListView“变量”字段:创建和读取单击时得到正确的值时,将其设置为正确的值...