2012-12-11 270 views
0

獲取特定的專欄中,我做了一個查詢數據庫中,並返回它,我把一個自定義的適配器上,然後我把一個列表視圖列表內。 直到我使用onItemClikListener工作正常。我想從查詢欄「_id」,我不知道如何做到這一點(我想通過這個ID作爲參數的另一個活動)。 我試圖getItemId從我的自定義適配器,但它返回的列表,而不是列「_id」上的位置。例如: 例如:我的查詢select * where name = x; ID爲1和3返回行......但getItemId使其位置1 =「_ ID1」和2 =「_ ID3」 ......當我通過它沒有其它活動查詢的「_id」返回行1和2;從自定義適配器

//Here i get the item position and pass to another activity 
listagem.setOnItemClickListener(new OnItemClickListener() { 
public void onItemClick(AdapterView<?> arg0, View arg1,int position, long id) {  
    String Column_id = String.valueOf(adapter.getItemId(position)); 
    Intent mostraLetra = new Intent(musica.this.getActivity(), ExibeMusica.class); 
    mostraLetra.putExtra("id", Column_id); 
    startActivity(mostraLetra); 
    } 
}); 

//Here i pass the Id when i click on a item on the list 
public String[] exibeMusica(String idMusica){ 
    String r = idMusica; 
    String[] resultado = {}; 
    Cursor resul = bancodados.query(Tabela_musica, new String[] {"_id", "Musica","Cantor","letra_musica","cat_oracao","cat_missa"}, "_Id = " +r+"", null, null, null, null, null); 
    resul.moveToFirst(); 
    resultado[0] = String.valueOf(resul.getString(resul.getColumnIndex("_id"))); 
    resultado[1] = resul.getString(resul.getColumnIndex("Musica")); 
    resultado[2] = resul.getString(resul.getColumnIndex("Cantor")); 
    resultado[3] = resul.getString(resul.getColumnIndex("letra_musica")); 
    resultado[4] = resul.getString(resul.getColumnIndex("cat_oracao")); 
    resultado[5] = resul.getString(resul.getColumnIndex("cat_missa")); 
    resul.close(); 
    return resultado; 
} 

//This is my custom adapter 
public class CustomAdapter extends BaseAdapter{ 

LayoutInflater inflater; 
List<musica.ItemLista> itens; 

public CustomAdapter(Activity a, List<musica.ItemLista> itens) { 
    super();  
    this.itens = itens; 
    this.inflater = (LayoutInflater)a.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

public int getCount() { 
    // TODO Auto-generated method stub 
    return itens.size(); 
} 

public Object getItem(int position) { 

    return position; 
} 

public long getItemId(int position) { 
    return position; 
} 

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

    musica.ItemLista item = itens.get(position); 
    View vi = convertView; 

    if(convertView==null){ 
     vi = inflater.inflate(R.layout.linha_listview, null); 
     TextView id = (TextView)vi.findViewById(R.linhaLista.id); 
     TextView musica = (TextView)vi.findViewById(R.linhaLista.musica); 
     TextView artista = (TextView)vi.findViewById(R.linhaLista.cantor); 
     ImageView oracao = (ImageView)vi.findViewById(R.linhaLista.cat_oracao); 
     ImageView missa = (ImageView)vi.findViewById(R.linhaLista.cat_missa); 
     id.setText(String.valueOf(item.id)); 
     musica.setText(item.musica); 
     artista.setText(item.cantor); 
     String imgOra = item.oracao; 
     String imgMissa = item.missa; 

     if (imgOra.equals(null)) { 
      oracao.setImageResource(R.drawable.blank); 
     }else if(imgOra.equals("louvor")) { 
      oracao.setImageResource(R.drawable.louvor); 
     }else if(imgOra.equals("adoracao")) { 
      oracao.setImageResource(R.drawable.adoracao); 
     } 

     if (imgMissa.equals(null)) { 
      missa.setImageResource(R.drawable.blank); 
     }else if(imgOra.equals("louvor")) { 
      missa.setImageResource(R.drawable.louvor); 
     }else if(imgOra.equals("adoracao")) { 
      missa.setImageResource(R.drawable.adoracao); 
     } 
    }return vi; 
    } 
} 

任何人都可以幫助我獲得正確的「_id」?

回答

0

設置標籤的行視圖在適配器的getView這樣

......... 
    } 
    vi.setTag(String.valueOf(item.id)) 
    return vi; 
    ......... 

然後

public void onItemClick(AdapterView<?> arg0, View arg1,int position, long id) {  
String Column_id = (String) arg1.getTag(); 
...... 
+0

哇...這救了我的項目......感謝Naeem ......總有一天我會和你一樣好......呵呵......再次感謝。 –

0

雖然設置在CustomAdapter的linha_listview.xml,您嘗試添加多一個的TextView到像下面這樣的linha_listview.xml:

<TextView 
     android:id="@+id/pid" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:visibility="gone" /> 

當你設置這個可見性可惜的是,它在列表視圖中不再可見。稍後,在getView()方法中,通過pidtextview.setText(column_id)設置此文本視圖。因此,在點擊列表項時,通過

String pid = ((TextView) view.findViewById(R.id.pid)).getText().toString(); 

在列表項監聽器中獲得此列標識。通過以上代碼,您將獲得pid,通過intent.putExtra()將其傳遞給其他活動;在該活動檢索getIntent(數據),並檢索其中包含COLUMN_ID該特定行的數據,並顯示在該活動該特定行的信息。希望這可以幫助。如果您仍然有任何疑問,請回來。

0

寫這段代碼onItemClickListner

resul.moveToPosition(位置)

字符串COLUMN_ID = resul.getString(resul.getColumnIndex( 「_ ID」);