2015-03-30 2 views
9

Вот раздел моего кода. Я пытаюсь создать меню навигации, в котором, когда вы нажимаете на первый элемент списка, он запускает действие MrsClubb. Однако, когда я помещаю это в свой код, возникает ошибка:Android не может решить намерение конструктора

Cannot resolve constructor 'Intent(android.widget.AdapterView.OnItemClickListener,java.lang.Class<com....etc>)' 

Любые идеи, как решить эту проблему?

Двойной ** показывает, где в коде ошибка.

Вот часть кода:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); 
    mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer); 
    mDrawerList = (ListView)findViewById(android.R.id.list); 
    mDrawerListItems = getResources().getStringArray(R.array.drawer_list); 
    mDrawerList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mDrawerListItems)); 
    mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      switch(position) { 
       case 0: 
        Intent i = new Intent**(this, MrsClubb.class);** 
        startActivity(i); 
      } 
      mDrawerLayout.closeDrawer(mDrawerList); 

     } 
    }); 
    mDrawerToggle = new ActionBarDrawerToggle(this, 
      mDrawerLayout, 
      toolbar, 
      R.string.drawer_open, 
      R.string.drawer_close){ 
     public void onDrawerClosed(View v){ 
      super.onDrawerClosed(v); 
      invalidateOptionsMenu(); 
      syncState(); 
     } 
     public void onDrawerOpened(View v){ 
      super.onDrawerOpened(v); 
      invalidateOptionsMenu(); 
      syncState(); 
     } 
    }; 
+2

Используйте 'view.getContext()' вместо 'this' как первый параметр для конструктора Intent –

+0

@ Zygotelnit yeah У меня, к сожалению, мне нужно подождать 90 минут, но когда я его опубликую, я отправлю ссылку здесь, чтобы вы могли видеть. –

+0

@JonathanChappell: в ожидании вашего вопроса :) –

ответ

26

Проблема:

Вы не можете использовать this обратиться к Activity внутри внутреннего класса, как this становится ссылкой на внутренний класс. Смысл constructor not resolved сообщения в том, что компилятор интерпретирует его как

Intent(AdapterView.OnItemClickListener listener, Class class) 

который он не признает, а

Intent(Context context, Class class) 

, который является правильным и то, что компилятор ожидает.

Решение:

Заменить

Intent i = new Intent(this, MrsClubb.class); 

с

Intent i = new Intent(MyActivity.this, MrsClubb.class); 

где MyActivity это имя Activity класса, которому принадлежит этот код.

+0

Спасибо! ошибка разрешается, однако всякий раз, когда я запускаю приложение и нажимаю на позицию 0, приложение перестает работать. –

Смежные вопросы