#java #android #listview #android-intent
#java #Android #просмотр списка #android-намерение
Вопрос:
Я пытаюсь сделать свой ListItem интерактивным, вызывая setOnItemClickListener и передавая намерение начать мое новое действие, но это не работает. По сути, я намереваюсь повторно использовать одно и то же действие с разными данными, но пока я просто хочу привести в порядок функциональность щелчка. Однако эта базовая функциональность не работает.
Под «не работает» я не имею в виду, что приложение вылетает. Я имею в виду, что щелчок ListItem не вызывает целевое действие.
Я поместил код в свой onCreate:
@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);
}
});
}
Это мой полный MainActivity на всякий случай:
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);
}
}
РЕДАКТИРОВАТЬ: я решил проблему
По сути, я настроил метод в атрибуте onClick XML CardView и создал метод в MainActivity с необходимым кодом намерения.
Комментарии:
1. Совет: Вы можете ответить на свой собственный вопрос и принять его, если хотите.
Ответ №1:
По сути, я настроил метод в атрибуте onClick XML CardView и создал метод в MainActivity с необходимым кодом намерения.
Комментарии:
1. Предложение: используйте CursorAdapter с базой данных вместо ArrayAdapter
2. Почему CursorAdapter ?