2011-05-02 22 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「變量」字段:創建和讀取單擊時得到正確的值時,將其設置爲正確的值...