Eclipse,按钮单击的新活动

Posted

技术标签:

【中文标题】Eclipse,按钮单击的新活动【英文标题】:Eclipse, new activity on button click 【发布时间】:2016-03-26 15:32:30 【问题描述】:

我是初学者,但我想修改一个较旧的项目。 在 Preferences Activity 上,已经有几个按钮,但我想添加一个新按钮,单击该按钮会打开一个新 Activity 并仅显示图像。

为此,我在 Manifest 中声明了这项新活动:

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

我在关联的 xml 布局上声明了按钮:

<Button
  android:id="@+id/button_visualhelp"
  android:layout_
  android:layout_
  android:onClick="visual_help"
  android:text="Visual Help" />

我创建了新的 VisualHelp 布局 xml:

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

声明了它的新 VisualHelpActivity java 文件:

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() 
    

...现在我应该在“主”PreferencesActivity 中将它们连接在一起,如下所示:

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));
    


根据androidbegin.com,我应该将此代码添加到PreferencesActivity java文件中(上面的代码):

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);
        
    );

唯一的问题是,如果我尝试添加这个新的public void,会弹出多个标记错误,如果我尝试在其他地方包含所有以下内容,我的应用程序将无法运行。那么,谁能帮我弄清楚在哪里以及如何包含此代码部分以使其工作?

【问题讨论】:

您的按钮是在 VisualHelpActivity XML 文件还是 PreferencesActivity XML 文件中? 顺便提一句友好的建议。如果您有一台不错的机器,请使用 Android Studio。如果你有一个英特尔处理器也很棒,因为新的模拟器(在最前沿的版本中)非常棒。 我的按钮在 PreferencesActivity xml 上,应该触发 VisualHelpActivity xml, 我不能使用 Android Studio,因为我需要迁移我的项目,我不是那么好 【参考方案1】:

在你的 PreferencesActivity 类中像这样在 oncreate 方法中添加代码:-

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);

【讨论】:

它不好,我从androidbegin.com填写了与我理解有关的代码,但似乎我不太理解,因为当我尝试按照您的建议填写时,我得到Intent myIntent = new Intent(PreferencesAtivity.this, VisualHelpActivity.class); PreferencesAtivity 无法解析为类型的错误。我也想问一下public void onClick(View arg0),那个arg0是什么意思? 它是您按下的视图 我的错,没有注意代码的正确性,没有检查就复制/粘贴代码。我错过了来自PreferencesAtivity.this 的“c”,因此代码现在可以正确编译,但按钮仍然无法调用新活动(没有给出错误,只有应用程序崩溃。 arg0 在查看新活动方面有什么作用? 正如我所提到的,新活动包括仅显示图像,上面的代码对于图像“召回”活动是否正确?

以上是关于Eclipse,按钮单击的新活动的主要内容,如果未能解决你的问题,请参考以下文章

当我在eclipse中单击按钮时,使用tabHost并转到特定选项卡

带有按钮的 Eclipse android 主菜单启动新活动(IES)

Eclipse:应用程序未安装!我猜错误在清单文件中。建议? [关闭]

我正在尝试在 Eclipse 中打开新活动(newpage),但只有第一个按钮(ACKNOWLEDGMENT))工作

Android Eclipse - 单击时创建另一个按钮的按钮

通过单击Eclipse中的“运行”按钮安装apk时如何将参数传递给ADB?