2016-10-07 4 views
0

私はsetOnItemClickListenerを呼び出して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); 
    } 
} 

編集:私は問題

を解決してきました

基本的に私は、CardViewのonClick XML属性にメソッドを設定し、必要なインテントコードでMainActivityのメソッドを作成しました。

+1

ヒント:あなた自身の質問に答えることができ、必要な場合はそれを受け入れることができます。 –

答えて

0

基本的に私はCardViewのonClick XML属性にメソッドを設定し、必要なインテントコードでMainActivityのメソッドを作成しました。

+0

提案:ArrayAdapterの代わりにデータベースでCursorAdapterを使用 –

+0

なぜCursorAdapterですか? –

関連する問題