【问题标题】:Disabling textfields on button click and simultaniously enabling another button [duplicate]在单击按钮时禁用文本字段并同时启用另一个按钮[重复]
【发布时间】:2016-06-29 10:50:21
【问题描述】:

我想要:

我的文本字段 textInput & textInput2btnClickMe 已禁用 & button2 当我点击按钮Bevestig weddenschap 时启用。

我不知道该怎么做。你能帮帮我吗?

XML 代码:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/details_frankrijk"
    android:textSize="17sp"
    android:id="@+id/tvDetails"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="@string/positie"
    android:id="@+id/lblOutput"
    android:layout_below="@+id/tvDetails"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="28dp"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/txtInput"
    android:layout_below="@+id/lblOutput"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignRight="@+id/lblOutput"
    android:layout_alignEnd="@+id/lblOutput" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="@string/bedrag"
    android:id="@+id/lblOutput2"
    android:layout_below="@+id/txtInput"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/txtInput2"
    android:layout_below="@+id/lblOutput2"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignRight="@+id/lblOutput2"
    android:layout_alignEnd="@+id/lblOutput2" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/bevestig_weddenschap"
    android:id="@+id/button"
    android:layout_below="@+id/plaatsbet"
    android:layout_toRightOf="@+id/tvDetails"
    android:layout_toEndOf="@+id/tvDetails"
    android:onClick="btnClickMe" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="@string/plaats_de_weddenschap"
    android:id="@+id/plaatsbet"
    android:layout_below="@+id/txtInput2"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/volgende"
    android:id="@+id/button2"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:clickable="false" />

Java 代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tweedescherm);
    TextView tvDetails = (TextView) findViewById(R.id.tvDetails);

    Intent i = getIntent();
    //haal data van de intents en zet deze in de textview
    tvDetails.setText(i.getIntExtra("details", R.string.details_frankrijk));

}

public void btnClickMe (View v) {
    TextView tvDetails = (TextView) findViewById(R.id.tvDetails);
    EditText txtInput = (EditText) findViewById(R.id.txtInput);
    TextView lblOutput = (TextView) findViewById(R.id.lblOutput);
    EditText txtInput2 = (EditText) findViewById(R.id.txtInput2);

    lblOutput.setText("Het land " + tvDetails.getText().toString() + " haalt in het EK volgens jou positie " + txtInput.getText().toString() + ". Je hebt hiervoor " + txtInput2.getText().toString() + " euro ingezet.");

}

}

【问题讨论】:

  • 每个人都使用View.setEnabled(boolean)
  • 上面的链接回答按钮,但它是相同的文本视图,因为使用的方法来自 View 类,两者都继承自它

标签: java android android-studio


【解决方案1】:

对于 EditText,请结合使用 editText.setEnabled(false);editText.setFocusable(false);

仅对于按钮button.setEnable(false) 就足够了。

【讨论】:

    【解决方案2】:

    您可以将.setEnabled(false) 用于EditTexts 和.setClickable(false) 用于Button,并在单击Button 时切换布尔值Bevestig weddenschap

    喜欢

     txtInput.setEnabled(false);
     txtInput2.setEnabled(false);
     button.setEnabled(false);
    

    Bevestig weddenschap 被点击时,切换布尔值

     txtInput.setEnabled(true);
     txtInput2.setEnabled(true);
     button.setEnabled(true);
    

    EDIT先写一个自定义函数

     private void setDisableOrEnable(boolean flag) {
       txtInput.setEnabled(flag);
       txtInput2.setEnabled(flag);
       button.setEnabled(flag);
     }
    

    第一次在onCreate() 调用函数setDisableOrEnable(false) 并在 Bevestig weddenschap 按钮上单击 call setDisableOrEnable(true)

    并确保 txtInputtxtInput2button 在调用 onCreate() 上的 setDisableOrEnable(false) 之前已初始化

    所以你的onCreate() 看起来像这样。

      EditText txtInput;
      TextView lblOutput; 
      EditText txtInput2;
      TextView tvDetails;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_tweedescherm);
      tvDetails = (TextView) findViewById(R.id.tvDetails);
      txtInput = (EditText) findViewById(R.id.txtInput);
      lblOutput = (TextView) findViewById(R.id.lblOutput);
      txtInput2 = (EditText) findViewById(R.id.txtInput2);
    
      setDisableOrEnable(false);
    
      Intent i = getIntent();
      //haal data van de intents en zet deze in de textview
      tvDetails.setText("" + i.getIntExtra("details", R.string.details_frankrijk));
    
      }
    
    
    public void btnClickMe (View v) {
    
        setDisableOrEnable(true);
        lblOutput.setText("Het land " + tvDetails.getText().toString() + " haalt in het EK volgens jou positie " + txtInput.getText().toString() + ". Je hebt hiervoor " + txtInput2.getText().toString() + " euro ingezet.");
    
     }
    
     private void setDisableOrEnable(boolean flag) {
       txtInput.setEnabled(flag);
       txtInput2.setEnabled(flag);
       button.setEnabled(flag);
     }
    

    希望对你有帮助

    【讨论】:

    • 按钮也可以使用 setEnabled
    • 你能告诉我如何编码布尔值吗?我很无助想弄清楚我做错了什么x.x
    • @NickyPloegman 请查看我编辑的答案
    • @NickyPloegman 你厌倦了编辑后的答案吗?
    • @NickyPloegman 请试试这个.. 让我知道,可能我已经修复了 tvDetails.setText() 的空指针问题。请参阅编辑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    • 2012-05-23
    • 2020-10-20
    • 2022-12-20
    相关资源
    最近更新 更多