2016-03-23 21 views
0

Ich zeige eine Listview von aufgezeichneten Daten an und wenn der Benutzer auf ein bestimmtes Listenelement klickt, löst es eine Absicht aus und bringt den Benutzer zum Profil für diesen ausgewählten Benutzer. Ich habe gearbeitet, als ich mein Projekt zum ersten Mal durchführte, aber seitdem funktioniert es einfach nicht. Vielen Dank im Voraus.setOnItemClick wird nicht erkannt (Android)

public class CowListView extends ListActivity { 

    RegisterCowAdapter cowAdapter; 
    private DataBaseHelper databaseHelper; 
    public ListView listView; 
    TextView student_Id; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.cow_list_item); 
     cowAdapter = new RegisterCowAdapter(this); 
     cowAdapter.open(); 
     updateCowUI(); 
     listView = (ListView) findViewById(android.R.id.list); 

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       student_Id = (TextView) view.findViewById(R.id.cowtagnolist); 
       String studentId = student_Id.getText().toString(); 
       Intent objIndent = new Intent(getApplicationContext(), CowProfile.class); 
       Toast.makeText(CowListView.this, "Clicked", Toast.LENGTH_SHORT).show(); 
       objIndent.putExtra("student_Id", Integer.parseInt(studentId)); 
       startActivity(objIndent); 
      } 
     }); 

    } 


    private void updateCowUI() { 

     Cursor cursor = cowAdapter.getAllCowData(); 
     startManagingCursor(cursor); 
     String[] from = new String[]{RegisterCowAdapter.COWTAGNO, RegisterCowAdapter.COWDOB}; 
     int[] to = new int[]{R.id.cowtagnolist, R.id.cowdoblist}; 
     SimpleCursorAdapter reminders = new SimpleCursorAdapter(
       this, 
       R.layout.cow_list_item, 
       cursor, 
       from, 
       to 
     ); 
     this.setListAdapter(reminders); 
    } 
} 


    private void updateCowUI() { 

     Cursor cursor =cowAdapter.getAllCowData(); 
     startManagingCursor(cursor); 
     String[] from = new String[]{RegisterCowAdapter.COWTAGNO, RegisterCowAdapter.COWDOB}; 
     int[] to = new int[]{R.id.cowtagnolist, R.id.cowdoblist}; 
     SimpleCursorAdapter reminders = new SimpleCursorAdapter(
       this, 
       R.layout.cow_list_item, 
       cursor, 
       from, 
       to 
     ); 
     this.setListAdapter(reminders); 
    } 
    } 

Meine XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RelativeLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:longClickable="true"> 
    <ListView 
     android:id="@android:id/list" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 


     > 
    </ListView> 
    <TextView 
     android:id="@+id/cowtagnolist" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:textColor="@color/black" 
     android:focusableInTouchMode="false" 
     android:clickable="false" 
     android:focusable="false" 


     android:descendantFocusability="blocksDescendants" 
     > 
    </TextView> 

    <TextView 
     android:id="@+id/cowdoblist" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 

     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="17dp" 
     android:focusableInTouchMode="false" 
     android:clickable="false" 
     android:focusable="false" 
     android:descendantFocusability="blocksDescendants" 
     android:textColor="@color/black"> 

    </TextView> 
    </LinearLayout> 
+0

Sie sollten versuchen, zu debuggen. –

+1

Warum haben Sie den ListView-Code im öffentlichen void onClick (Ansicht anzeigen) {? –

+0

Erstens Verschieben Sie Ihre Codes in OnClick() -Funktion zu OnCreate() auch müssen Sie nur einzelne ListView-Objekt, das nicht in OnCreate-Methode sein. –

Antwort

1

könnte eines von zwei Dingen sein. Sie haben OnClickListener implementiert, aber Sie haben nicht festgelegt, dass die ListView auf diese bestimmte Klasse gehört, noch haben Sie eine Methode in Ihrem onCreate aufgerufen, die den ListView-Listener auf diese Klasse setzt.

Zweitens denke ich, dass Sie OnItemClickListener und nicht onCLickListener implementieren müssen, da das, was auf dem ListView ist, ein Item ist.

Ich bin verwirrt, warum haben Sie onClick und dann setzen Sie den Listener innerhalb dieser Methode? Wie wird es in erster Linie wissen, dass die Ansicht angeklickt wurde, wenn sie nicht von Anfang an gehört, d.h. in der onCreate oder einer Methode, die in der onCreate aufgerufen wird? Ihre Logik scheint abit

+0

in kurzen implementieren OnItemClickListener dann die ListView onItemClickListener auf 'dies' in der onCreate. – Manny265