2015-01-29 4 views
0

У меня возникли проблемы с получением правильного значения id при нажатии на список.Получение значения идентификатора при нажатии на listview

Я сделал пользовательский адаптер, так как я рисую из данных SQLite, я получаю правильный текст, но когда я нажимаю на строку, я возвращаю индексный индекс 0, чего я не хочу.

Я также использую Sugar ORM, поэтому я не уверен, что для этого требуется специальная работа, чтобы получить поле id.

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

Благодаря

BoardArrayAdapter adapter = new BoardArrayAdapter(this, boards); 
setListAdapter(adapter); 

ListView lv = getListView(); 

registerForContextMenu(lv); 

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Toast.makeText(getApplicationContext(), "Board ID " + id, Toast.LENGTH_SHORT).show(); 
    } 
}); 
+0

Вы можете показать код? все, что имеет отношение к тому, как вы создаете список и получите идентификатор –

+0

Наведите код 'OnItemClickListener' часть – Rohit5k2

ответ

3

Вам необходимо переопределить метод getItemId() в адаптере. В соответствии с документами SugarORM вы можете позвонить getid(), чтобы вернуть идентификатор db.

ArrayList<Object> data; 

    @Override 
    public long getItemId(int position) { 
     return data.get(position).getid(); 
    } 
+0

спасибо, человек, который сделал трюк – Eman

1

Вот как я использую мой проект (с SQLite и CustomListView).

GetData метод

public void getData(View view, long id) 
{ 
    //storing the ID into a public static variable and converting to int 
    CLIENTE_ID = (int)id; 

    //When the user touches on the field in the listview, I get the touched field's name and email 
    TextView textViewnome = (TextView) view.findViewById(R.id.tv_cliente_nome); 
    TextView textViewemail = (TextView) view.findViewById(R.id.tv_cliente_email); 

    //Stores both name and email of the touched field 
    String nome = textViewnome.getText().toString(); 
    String email = textViewemail.getText().toString(); 

    //store into static variable 
    CLIENTE_NOME = nome; 
    CLIENTE_EMAIL = email; 
} 

в OnCreate:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 


     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
     { 
      getData(view, id); 
      Log.d("myClass", "ID: " + view.getId()); 
     } 
    }); 

Я надеюсь, что это помогает! :)