【问题标题】:Why doesn't Intent work with setOnItemClickListener?为什么 Intent 不适用于 setOnItemClickListener?
【发布时间】:2016-10-07 21:01:03
【问题描述】:

我正在尝试通过调用 setOnItemClickListener 来使我的 listItem 可点击,并传入启动新活动的意图,但它不起作用。基本上我的意图是用不同的数据重用相同的活动,但现在,我只想按顺序获得点击功能。但是,这个基本功能不起作用。

“不起作用”并不是指应用程序崩溃。我的意思是 listItem 点击没有调用目标 Activity。

我已将代码放在我的 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);
    }
}

编辑:我已经解决了问题

基本上我已经在 CardView 的 onClick XML 属性中设置了一个方法,并在 MainActivity 中使用必要的意图代码创建了一个方法。

【问题讨论】:

  • 提示:您可以回答自己的问题,如果愿意,可以接受。

标签: java android listview android-intent


【解决方案1】:

基本上我已经在 CardView 的 onClick XML 属性中设置了一个方法,并在 MainActivity 中使用必要的意图代码创建了一个方法。

【讨论】:

  • 建议:使用带数据库的 CursorAdapter 而不是 ArrayAdapter
  • 为什么选择 CursorAdapter?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多