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.
Tipp: Sie können Ihre eigene Frage beantworten und akzeptieren, wenn Sie möchten. –