2012-12-11 268 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”);