2015-08-11 5 views
1

Я пытаюсь создать Action Bar, следуя руководству Android Studio. Я знаком с VBA, C++ и Python, но это первый раз, когда я отважился на приложение, которое использует java, xml и т. Д. В одном. Я говорю это, потому что я думаю, что я потерял (или неправильно назвал) что-то в своем коде, так как, когда я пытаюсь запустить это, я получаю ошибку error: duplicate class: com.example.batman.myfirstapp.MyActivity.Android Tutorial - добавление панели действий, дублирующий класс?

Я не понимаю, как это дубликат, у меня есть только один «MyActivity.java», поэтому я думаю, что не могу сделать больше одного public class MyActivity extends ... за .java-файл?

Вот что у меня есть (пожалуйста, дайте мне знать, если мне нужно, чтобы включить другой код):

MyActivity.java

package com.example.batman.myfirstapp; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.EditText; 
import android.support.v7.app.*; 

public class MyActivity extends ActionBarActivity{ 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu items for use in the action bar 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main_activity_actions, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle presses on the action bar items 
     switch (item.getItemId()) { 
      case R.id.action_search: 
//    openSearch(); 
       return true; 
      case R.id.action_settings: 
//    openSettings(); 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 
} 

public class MyActivity extends AppCompatActivity { 
    public final static String EXTRA_MESSAGE = ".com.batman.myfirstapp.MESSAGE"; 

    /** 
    * Called when the user clicks the Send button 
    */ 
    public void sendMessage(View view) { 
     Intent intent = new Intent(this, DisplayMessageActivity.class); 
     EditText editText = (EditText) findViewById(R.id.edit_message); 
     String message = editText.getText().toString(); 
     intent.putExtra(EXTRA_MESSAGE, message); 
     startActivity(intent); 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_display_message); 

//   getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     // If your minSdkVersion is 11 or higher, instead use: 
     getActionBar().setDisplayHomeAsUpEnabled(true); 
    } 
} 

main_activity_actions.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:myfirstapp="http://schemas.android.com/apk/res-auto"> 
    <!-- Search, should appear as action button --> 
    <item android:id="@+id/action_search" 
      android:icon="@drawable/ic_action_search" 
      android:title="@string/action_search" 
      myfirstapp:showAsAction="ifRoom" /> 
    <!-- Settings, should always be in the overflow --> 
    <item android:id="@+id/action_settings" 
      android:title="@string/action_settings" 
      myfirstapp:showAsAction="never" /> 
</menu> 

Опять же, я m не уверен, что другие файлы (strings.xml, DisplayMessageActivity.java и т. д.) были бы полезны для отладки выше, поэтому дайте мне знать, что еще я могу включить.

Благодарим за любые советы/помощь!

+2

* Я не могу сделать больше, чем один общественный класс MyActivity распространяется ... на .java файл * Вы получили это! – adelphus

ответ

2

Вы интуиция верна! Вы можете иметь только один класс MyActivity в файле, вот что это может выглядеть следующим образом:

public class MyActivity extends ActionBarActivity { 

    public final static String EXTRA_MESSAGE = ".com.batman.myfirstapp.MESSAGE"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_display_message); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.main_activity_actions, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.action_search: 
       return true; 
      case R.id.action_settings: 
       return true; 
      default: 
       return super.onOptionsItemSelected(item); 
     } 
    } 

    private void sendMessage(View view) { 
     Intent intent = new Intent(this, DisplayMessageActivity.class); 
     EditText editText = (EditText) findViewById(R.id.edit_message); 
     String message = editText.getText().toString(); 
     intent.putExtra(EXTRA_MESSAGE, message); 
     startActivity(intent); 
    } 
} 
+0

Duh! Спасибо, и я тоже ценю этот пример! Я покажу себе все это! (Спасибо всем!) – user3718365

+0

Нет проблем, удачи! –

1

Ваше предположение верно. В вашем файле .java у вас есть два класса с именем MyActivity. У вас может быть только один.

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