简体   繁体   中英

Eclipse, new activity on button click

I'm a beginner but I would like to modify an older project. On the Preferences Activity, there are already few buttons, but I would like to add a new button, which, when clicked, opens a new Activity and shows an image only.

For this I declared this new activity in the Manifest:

<activity
  android:name=".VisualHelpActivity"
  android:screenOrientation="portrait"
  android:theme="@style/AppTheme" >
</activity>

I declared the button on the associated xml layout:

<Button
  android:id="@+id/button_visualhelp"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:onClick="visual_help"
  android:text="Visual Help" />

I created the new VisualHelp layout xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent" >
    <ImageView
      android:id="@+id/visualhelp_image"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:scaleType="fitXY"
      android:src="@drawable/guide" />

Declared its new VisualHelpActivity java file:

public class VisualHelpActivity extends TranslatableActivity {

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

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.visual_help, menu);
            return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                    return true;
            }
            return super.onOptionsItemSelected(item);
    }

    @Override
    protected void refreshLanguage() {
    }
}

… and now I'm supposed to connect it all together in the "main" PreferencesActivity, which looks as follows:

public class PreferencesActivity extends TranslatableActivity {

    public static String url = "https://www.paypal.com/cgi-bin....";

    ImageView donate;

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

    @SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            setContentView(R.layout.activity_preferences);

            donate = (ImageView) findViewById(R.id.button_donate);
            donate.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                            donate(v);
                    }
            });

            Spinner s = (Spinner) findViewById(R.id.combo_language);
            Lang[] languages = LanguageUtil.Lang.values();

            s.setAdapter(new ArrayAdapter<Lang>(this,
                            android.R.layout.simple_dropdown_item_1line, languages));
            s.setSelection(getPosition(languages, LanguageUtil.getLanguage()), true);
    }

    private int getPosition(Object[] objs, Object item) {
            for (int i = 0; i < objs.length; i++) {
                    if (objs[i] == item)
                            return i;
            }
            return -1;
    }

    public void update(View v) {
            Maintenance.downloadDB(this, new onFinishListener() {

                    @Override
                    public void onFinish() {
                            LanguageUtil.loadLanguage(PreferencesActivity.this);
                    }
            });
    }

    public void copy(View v) {
            Maintenance.copyDB(this, new onFinishListener() {
                    @Override
                    public void onFinish() {
                            LanguageUtil.loadLanguage(PreferencesActivity.this);
                    }
            });
    }

    public void save(View v) {
            LanguageUtil.saveLanguage(this,
                            (Lang) ((Spinner) findViewById(R.id.combo_language))
                                            .getSelectedItem());
            LanguageUtil.loadLanguage(this);
            setResult(RESULT_OK);
            finish();
    }

    public void donate(View v) {
            Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(i);
    }

    public void cancel(View v) {
            finish();
    }

    @Override
    protected void refreshLanguage() {
            ((Button) findViewById(R.id.button_update)).setText(LanguageUtil
                            .getDeviceLabel(LanguageUtil.dev_update));
            ((TextView) findViewById(R.id.language_label))
            .setText(LanguageUtil.getDeviceLabel(LanguageUtil.dev_language));
    }

}

According to androidbegin.com , I should add this code into the PreferencesActivity java file (code above):

Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_visualhelp);
    button = (Button) findViewById(R.id.button_visualhelp);
    button.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {
    Intent myIntent = new Intent(PreferencesAtivity.this,
        VisualHelpActivity.class);
        startActivity(myIntent);
        }
    });
}

The only problem is that if I try to add this new public void , multiple marker errors pop up, and if I try to include all below somewhere else, my app fails to work. So, can anyone help me out where and how to include this code part to make it work?

add the code inside oncreate method like this in your PreferencesActivity class:-

Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.activity_preferences);

donate = (ImageView) findViewById(R.id.button_donate);
donate.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        donate(v);
    }
});


button = (Button) findViewById(R.id.button_visualhelp);
button.setOnClickListener(new OnClickListener() {
    public void onClick(View arg0) {
Intent myIntent = new Intent(PreferencesAtivity.this,
    VisualHelpActivity.class);
    startActivity(myIntent);
    }
});
Spinner s = (Spinner) findViewById(R.id.combo_language);
Lang[] languages = LanguageUtil.Lang.values();

s.setAdapter(new ArrayAdapter<Lang>(this,
        android.R.layout.simple_dropdown_item_1line, languages));
s.setSelection(getPosition(languages, LanguageUtil.getLanguage()), true);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM