2015-01-30 3 views
0

У меня есть ListView, заполненный ArrayList. Когда я нажимаю на элемент LV, я вижу, что приложение запускает новое действие. Но если я нажму на второй или третий элемент списка, это как если бы я нажал первый. Вот код:setOnItemClickListener возвращает первый элемент

RipartitoriRepo repo = new RipartitoriRepo(this); 
     my_list = repo.getRipartitoriByIdUnitàAbitativa(IdUnitàAbitativa); 
     if(my_list.size()!=0){ 

      my_listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
        Intent intent = new Intent(MainActivity.this, NextActivity.class); 

        TextView my_textview = (TextView)findViewById(R.id.IdElementCell); 
        String myId = my_textview.getText().toString(); 
        intent.putExtra("IdElement", myId); 

        startActivity(intent); 
       } 
      }); 
      SimpleAdapter adapter; 
      adapter = new SimpleAdapter(MainActivity.this, my_list, R.layout.ripartitori_row, new String[]{"idripartitore","posizione", "matricola", "altezza", "larghezza"}, 
        new int[]{R.id.IdRipartitore_cell,R.id.ripart_posizione, R.id.ripart_matricola, R.id.rip_altezza, R.id.rip_larghezza}); 

      my_listview.setAdapter(adapter); 
     } 

И вот клетка:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:visibility="gone" 
     android:id="@+id/IdElement_cell"/> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/rip_testo1" 
      android:text="Posizione:" 
      android:textStyle="bold" 
      android:textSize="20dp" 
      android:layout_marginLeft="5dp" 

      /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@id/rip_testo1" 
      android:text="xxx" 
      android:textSize="20dp" 

      android:layout_marginLeft="3dp" 
      android:id="@+id/ripart_posizione"/> 

     </RelativeLayout> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="5dp" 
      android:textSize="20dp" 
      android:textStyle="bold" 
      android:text="Matricola:" 
      android:id="@+id/rip_testo4"/> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/ripart_matricola" 
      android:layout_toRightOf="@id/rip_testo4" 
      android:text="xxx" 
      android:textSize="20dp" 
      android:layout_marginLeft="3dp" 
      /> 
     </RelativeLayout> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/rip_testo2" 
      android:text="Altezza:" 
      android:layout_marginLeft="8dp" 
      android:textSize="17dp" 
      android:textStyle="bold" 
      /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="3dp" 
      android:text="xxx" 
      android:layout_toRightOf="@+id/rip_testo2" 
      android:textSize="17dp" 
      android:id="@+id/rip_altezza"/> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@+id/rip_altezza" 
      android:text="Larghezza:" 
      android:layout_marginLeft="10dp" 
      android:textSize="17dp" 
      android:textStyle="bold" 
      android:id="@+id/rip_testo3"/> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/rip_larghezza" 
      android:layout_toRightOf="@id/rip_testo3" 
      android:text="xxx" 
      android:textSize="17dp" 
      android:layout_marginLeft="3dp"/> 

     </RelativeLayout> 

</LinearLayout> 

Например: если первый элемент имеет Id = 00001 и второй имеет Id = 0002, когда я нажимаю на списке, то setOnItemClickListener метод работы как будто я всегда щелкнул первым элементом. Таким образом, my_textview всегда будет 00001.

+0

Вы всегда проезжаете один и тот же идентификатор –

+0

точно .. но почему? – gabboSonc

ответ

2

Я не могу найти R.id.IdElementCell в вашем xml.

Но я думаю, что вам нужно сделать

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
    ... 

    TextView my_textview = (TextView)view.findViewById(R.id.IdElementCell); 
    String myId = my_textview.getText().toString(); 

    ... 
} 

Редактировать

Вы пытались найти свой вид с идентификатором R.id.IdElementCell на вашей деятельности. Поскольку это представление, входящее в состав listItem, оно имеет несколько экземпляров и вернет первое представление, найденное с этим идентификатором.

Вызывая функцию findViewById на клике, мы ограничиваем наш поиск дочерними представлениями в этом клик-представлении. Из-за этого мы получаем правильное представление.

+0

мой плохой ... я забыл изменить xml – gabboSonc

+0

это решение! Я скучаю по ВИДУ. – gabboSonc

0

Вы можете сделать

intent.putExtra("IdElement", position); 

startActivity(intent); 

Update

TextView my_textview = (TextView)findViewById(R.id.IdElementCell); 
String myId = my_textview.getText().toString(); 
my_textview.setTag("myId", myId); 
intent.putExtra("IdElement", my_textview.getTag("myId")); 
startActivity(intent); 
+0

Мне нужен контент из текстового поля, потому что у меня есть идентификатор из базы данных – gabboSonc

+0

проверить обновление –

+0

решение от @snyersk – gabboSonc

0

Вы должны пройти:

intent.putExtra("IdElement", id); // OR position, if you don't care about ID's 

не

intent.putExtra("IdElement", myId); 
+0

Мне нужен контент из текстового представления, потому что у меня есть IdElement из DB – gabboSonc

0

вы объявляете TextView в OnClick вашего ListView с помощью следующего кода

TextView my_textview = (TextView)findViewById(R.id.IdElementCell); 
String myId = my_textview.getText().toString(); 
intent.putExtra("IdElement", myId); 

и отправить этот идентификатор к вашей следующей деятельности не имеет значения, какую позицию вы щелкаете вы всегда пропускание TextView идентификатора с идентификатором IdElementCell поэтому вы всегда получаете один и тот же идентификатор, вы никогда не отправляли разные идентификаторы, чтобы получить позицию, в которой произошло событие клика, вы можете получить ее по положению или параметр длинный идентификатор в setOnItemClickListener() предоставит вам идентификатор строки пункта, который был нажат.

+0

, но содержимое текстового представления - это идентификатор, взятый из БД через запрос. Мне нужен этот идентификатор, потому что в следующем действии я использую метод, называемый «getElementById» – gabboSonc

+0

, поэтому вы всегда передаете один и тот же идентификатор, так как вы получите другой идентификатор? –

Смежные вопросы