Как получить идентификатор строки из списка с помощью метода onclick?

Я возвращаю эти данные из базы данных,

@Override
public ArrayList < String > returnProducerData(String entereduser_id) {

        Cursor c = db.rawQuery("Select * from  producer_table WHERE user_id= "+entereduser_id, null);
        ArrayList<String> producerResult = new ArrayList<String>();

        int ProducerId = c.getColumnIndex(PRODUCER_ID);
        int UserId= c.getColumnIndex(USER_ID);
        int ProducerName = c.getColumnIndex(PRODUCER_NAME);
        int ProducerSurname = c.getColumnIndex(PRODUCER_SURNAME);

        for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
            producerResult.add(c.getString(ProducerId) +" "+c.getString(UserId) +" "+ c.getString(ProducerName) +" "+ c.getString(ProducerSurname) );

        }

        return producerResult;

}   

и я использую этот метод, чтобы показать данные в виде списка

 HashMap<String, String> user = session.getUserDetails();
 String user_id= user.get(SessionManager.USER_ID);
 ArrayList<String> data = info.returnProducerData(user_id); 

    //set all data as listview using Array
    listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data));
    //set listview action
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // TODO Auto-generated method stub
            String UserInfo = listView.getItemAtPosition(position).toString(); 
            Intent i =new Intent(ShowProducerTable.this, TestDataBase.class);
                  i.putExtra("UserInfo", UserInfo);
                  startActivity(i);
                  /***just to check if it has value***/             
           // Toast.makeText(getBaseContext(),"position is : "+position+" and value is "+UserInfo,Toast.LENGTH_SHORT).show();
                  Toast.makeText(getBaseContext(), id + "", Toast.LENGTH_LONG).show();
        }
    });

и теперь я хочу увидеть идентификатор_производителя строки, в которой я нажал.

Не могли бы вы мне помочь?

4 ответа

Решение
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
        // TODO Auto-generated method stub
        String UserInfo = listView.getItemAtPosition(position).toString(); 
       String userId = UserInfo.substring(0, UserInfo .indexOf(" "));
        Intent i =new Intent(ShowProducerTable.this, TestDataBase.class);
              i.putExtra("UserInfo", UserInfo);
              startActivity(i);
              /***just to check if it has value***/             
       // Toast.makeText(getBaseContext(),"position is : "+position+" and value is +UserInfo,Toast.LENGTH_SHORT).show();
              Toast.makeText(getBaseContext(), id + "", Toast.LENGTH_LONG).show();
    }
});

Пожалуйста, смотрите строку "String userId = UserInfo.substring(0, UserInfo .indexOf(" "));" в коде... Вы получите идентификатор пользователя.

String productIDAsString;

for(int i= 0; i < UserInfo.length;i+++) {
    if(!(Userinfo.substring(i,i+1).equals(" ")) {
        productIDAsString += UserInfo.substring(i,i+1);
    }
}
int productID = Integer.parseInt(productIDAsString);

Или вы можете создать другой класс POJO для хранения ваших данных, возвращаемых из базы данных, и используя его метод получения, вы сможете получить желаемый результат, например:

public ArrayList < Producer > returnProducerData(String entereduser_id) {

    Cursor c = db.rawQuery("Select * from  producer_table WHERE user_id= "+entereduser_id, null);
    ArrayList<Producer> producerResult = new ArrayList<Producer>();

    int ProducerId = c.getColumnIndex(PRODUCER_ID);
    int UserId= c.getColumnIndex(USER_ID);
    int ProducerName = c.getColumnIndex(PRODUCER_NAME);
    int ProducerSurname = c.getColumnIndex(PRODUCER_SURNAME);

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()){
        Producer producer = new Producer();
        producer.setId(c.getString(ProducerId));
        producer.setUserId(c.getString(UserId));
        producer.setName(c.getString(ProducerName));
        producer.setSurname(c.getString(ProducerSurname));
        producerResult.add(producer);

    }

    return producerResult;

}

Затем используйте пользовательский адаптер для своего списка и в методе onItemClick вы можете получить доступ к идентификатору, вызвав метод provider.getUserID().

Используйте один из CursorAdapter реализация обеспечена рамками. Таким образом, товар на позиции возвращается getItemAtPosition, в Cursor переместился в положение, из которого вы можете легко извлечь нужную информацию, избегая взломов, которые могут быть трудны для отслеживания / отладки и могут привести к неприятным сбоям

Другие вопросы по тегам