2016-10-07 3 views
0

Ich versuche, mein listItem klickbar zu machen, indem ich den setOnItemClickListener aufruft und eine Intention übergebe, meine neue Aktivität zu starten, aber es funktioniert nicht. Grundsätzlich ist es meine Absicht, die gleiche Aktivität mit verschiedenen Daten wiederzuverwenden, aber im Moment möchte ich nur die Klickfunktionalität in Ordnung bringen. Diese grundlegende Funktionalität funktioniert jedoch nicht.Warum funktioniert Intent nicht mit setOnItemClickListener?

Mit "funktioniert nicht", meine ich nicht, dass die App abstürzt. Ich meine, dass der listItem-Klick die zielgerichtete Aktivität nicht aufruft.

ich den Code in meine onCreate platziert haben:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     createDatabase(); 

     listView = (ListView) findViewById(R.id.lvSemesters); 
     databaseHelper = new DatabaseHelper(MainActivity.this); 
     semesterList = new DatabaseHelper(MainActivity.this).getAllSemesters(); 
     this.adapter = new SemesterAdapter(MainActivity.this, semesterList); 
     floatActionButton = (FloatingActionButton) findViewById(R.id.addActionButton); 


     floatActionButton.setOnClickListener(this); 
     listView.setAdapter(adapter); 

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

Das ist mein voller MainActivity für alle Fälle:

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
    private ListView listView; 
    private DatabaseHelper databaseHelper; 
    private SQLiteDatabase db; 
    private FloatingActionButton floatActionButton; 
    private SemesterAdapter adapter; 
    List<SemesterEntity> semesterList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     createDatabase(); 

     listView = (ListView) findViewById(R.id.lvSemesters); 
     databaseHelper = new DatabaseHelper(MainActivity.this); 
     semesterList = new DatabaseHelper(MainActivity.this).getAllSemesters(); 
     this.adapter = new SemesterAdapter(MainActivity.this, semesterList); 
     floatActionButton = (FloatingActionButton) findViewById(R.id.addActionButton); 


     floatActionButton.setOnClickListener(this); 
     listView.setAdapter(adapter); 

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

    protected void createDatabase() { 
     db = openOrCreateDatabase("semesterDatabase", Context.MODE_PRIVATE, null); 
     db.execSQL("CREATE TABLE IF NOT EXISTS semesterTable(id INTEGER PRIMARY KEY, semester VARCHAR);"); 
    } 

    public void select() { 
     databaseHelper = new DatabaseHelper(MainActivity.this); 
     semesterList = databaseHelper.getAllSemesters(); 
     SemesterAdapter adapter = new SemesterAdapter(MainActivity.this, semesterList); 
     listView.setAdapter(adapter); 
     adapter.notifyDataSetChanged(); 
    } 

    @Override 
    public void onClick(View v) { 
     int id = v.getId(); 
     int counter = databaseHelper.getUsersCount(); 
     if (counter < 8) { 
      switch (id) { 
       case R.id.addActionButton: 
        String semesterName = "Semester"; 
        String query = "INSERT INTO semesterTable (semester) VALUES('" + semesterName + "');"; 
        db.execSQL(query); 
        select(); 
        break; 
      } 
     } else { 
      Toast.makeText(this, "You can't add more than 8 semesters", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 

    public void clearTable() { 
     db.execSQL("delete from " + DatabaseHelper.TABLE_NAME); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     int id = item.getItemId(); 
     if (id == R.id.delete) { 
      clearTable(); 
      select(); 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

EDIT: Ich habe das Problem gelöst haben

Grundsätzlich habe ich eine Methode im onClick XML-Attribut der CardView eingerichtet und eine Methode in MainActivity mit dem notwendigen Intent-Code erstellt.

+1

Tipp: Sie können Ihre eigene Frage beantworten und akzeptieren, wenn Sie möchten. –

Antwort

0

Grundsätzlich habe ich eine Methode in der CardView onClick XML-Attribut eingerichtet und erstellt eine Methode in MainActivity mit dem erforderlichen Intent-Code.

+0

Vorschlag: Verwenden Sie einen CursorAdapter mit einer Datenbank anstelle von ArrayAdapter –

+0

Warum CursorAdapter? –

Verwandte Themen