从另一个 Activity 访问一个 Activity 中的小部件

Posted

技术标签:

【中文标题】从另一个 Activity 访问一个 Activity 中的小部件【英文标题】:Accessing widgets in one Activity from another Activity 【发布时间】:2014-09-21 21:09:34 【问题描述】:

我想在一个Activity 中访问小部件,并使它们在另一个Activity 中不可见。

活动 1

<Button
    android:layout_
    android:layout_
    android:text="button"
    android:id="@+id/button" />

活动 2

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_two);

    EditText name = (EditText) findViewById(R.id.name);
    if(name.getText().toString().equals("john")
        button.setEnabled(false);
    

有什么方法可以使按钮从活动 2 中隐藏?

【问题讨论】:

你能告诉我们如何在 two.class 中显示 One.class 按钮吗?我们必须学习如何做到这一点。 我不知道该怎么做这就是我问的原因。 首先这是不可能的,请让我知道您实际尝试做什么,以便我们尝试以另一种方式实现您的要求。 我正在制作游戏,当这个人完成关卡时,我希望下一个关卡可用,例如真的 不清楚你想做什么,能不能详细点? 【参考方案1】:

您可以使用您正在使用的意图来启动第二个活动来传递您需要的参数。 要将参数放入意图中,您可以使用任何 intent.putExtra 方法。你可以找到所有方法的描述here。 因此,如果您想输入一个布尔值,您可以执行以下操作:

secondActivityIntent.putExtra("my_bool", false);

然后开始你的第二个活动,然后在你的第二个活动上你可以得到你的参数:

getIntent().getBooleanExtra("my_bool");

检索数据的不同方法也可以在上一个链接中找到。

此外,要使视图不可见,您应该使用button.setVisibility(View.GONE)button.setVisibility(View.INVISIBLE) 方法,而不是button.setEnabled(false);

希望对你有帮助,干杯!

【讨论】:

【参考方案2】:

您可以在应用程序单例中保持按钮的可见性:

public class App 
    static private App instance;

    private boolean buttonVisible;

    private App()
        buttonVisible = true;
    

    public static App getInstance() 
        if (instance==null)
            instance = new App();
        return instance;
    

    public boolean isButtonVisible() 
        return buttonVisible;
    

    public void setButtonVisible(boolean buttonVisible) 
        this.buttonVisible = buttonVisible;
    

第一个 Activity 可以在 onStart() 方法中设置其按钮的可见性 根据可见性状态:

@Override
protected void onStart() 
    super.onStart();
    findViewById(R.id.button).setVisibility(
        App.getInstance().isButtonVisible()?View.VISIBLE:View.GONE);

第二个Activity可以使用改变可见性状态

    EditText name = (EditText) findViewById(R.id.name);
    if(name.getText().toString().equals("john")
        App.getInstance().setButtonVisible(false);
        

每次第一个活动获得焦点时,它都会运行其 onStart() 方法,并且按钮将根据 App 单例中的可见性状态可见或不可见。

【讨论】:

【参考方案3】:

在第一个活动中:

public class MainActivity extends AppCompatActivity 
public static MainActivity mThis = null;
.
.
@Override
protected void onCreate(Bundle savedInstanceState) 

    mThis=this;
    .
    .

在第二个活动中:

TextView txt=MainActivity.mThis.findViewById(R.id.txtFrom);
txt.setText("Hellow I'm From Second Activity");

【讨论】:

【参考方案4】:

您可以使按钮不可见或可点击为 false

【讨论】:

问题是如何做到这一点。

以上是关于从另一个 Activity 访问一个 Activity 中的小部件的主要内容,如果未能解决你的问题,请参考以下文章

从另一个 Activity 返回的错误 requestCode onActivityResult

从另一个 Activity 刷新 Recyclerview

使用 ListView 从另一个 Activity 打印 ArrayList

从另一个提供循环依赖的模块打开活动

从另一个 Activity 类执行 Fragment 中的 AsyncTask 并更新其中的 UI

从另一个 Activity 返回后返回 MainActivity 的片段?