2012-03-20 71 views
0

我在這裏有一個問題。 我需要它,所以如果有我的2個文本框在任何一種沒有文字,你不會比布爾按下按鈕Java android xml textbox has no text = no button hit

我的Java代碼:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.teachme); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    Button teach = (Button)findViewById(R.id.btn_teach_send); 
    teach.setOnClickListener(this); 


} 

@Override 
public void onClick(View v) { 
    switch(v.getId()) 
    { 

     case R.id.btn_teach_send: 
     { 
      // Create a new HttpClient and Post Header 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost("http://monaiz.net/get.php"); 

      String responseStr = ""; 

      try { 
       TextView word = (TextView)findViewById(R.id.tv_teach_request); 
       TextView answer = (TextView)findViewById(R.id.tv_teach_response); 

       // Add your data 
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3); 
       nameValuePairs.add(new BasicNameValuePair("word", word.getText().toString())); 
       nameValuePairs.add(new BasicNameValuePair("answer", answer.getText().toString())); 
       nameValuePairs.add(new BasicNameValuePair("action", "teach")); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

       // Execute HTTP Post Request 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 

       responseStr = EntityUtils.toString(entity); 

      } catch (Exception e) { 
       // TODO Auto-generated catch block 
      } 

      if(responseStr.equals("ok")) 
      { 
       Toast.makeText(getApplicationContext(), "Poka just learned a new word!", Toast.LENGTH_LONG).show(); 
       try { 
        this.finish(); 
       } catch (Throwable e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 
} 

然後這是被OBV我的XML代碼該應用程序的設計..

按鈕和編輯文本的東西在裏面

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <ScrollView android:scrollbars="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:fillViewport="true" android:isScrollContainer="true"> 
     <LinearLayout android:orientation="vertical" android:id="@+id/ll_teach" android:background="#ffffffff" android:layout_width="fill_parent" android:layout_height="fill_parent"> 
      <LinearLayout android:gravity="center_horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10.0dip" android:layout_marginBottom="2.0dip" android:layout_weight="0.0"> 
       <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="50.0dip" android:src="@drawable/if_ask" /> 
      </LinearLayout> 
      <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1.0"> 

        <EditText android:gravity="top|left|center" android:maxLength="30" android:id="@+id/tv_teach_request" android:background="@drawable/mespeak" android:paddingLeft="23.0dip" android:paddingTop="6.0dip" android:paddingRight="28.0dip" android:paddingBottom="23.0dip" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="20.0dip" android:layout_marginRight="5.0dip" android:layout_alignParentTop="true" style="@style/TeachBubbleFont" /> 

      </LinearLayout> 
      <LinearLayout android:gravity="center_horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10.0dip" android:layout_marginBottom="2.0dip" android:layout_weight="0.0"> 
       <ImageView android:layout_gravity="left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="40.0dip" android:src="@drawable/then_response" /> 
      </LinearLayout> 
      <LinearLayout android:layout_gravity="center" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1.0"> 
        <EditText android:gravity="top|left|center" android:maxLength="30" android:id="@+id/tv_teach_response" android:background="@drawable/pokaspeak" android:paddingLeft="28.0dip" android:paddingTop="6.0dip" android:paddingRight="23.0dip" android:paddingBottom="23.0dip" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="1.0dip" android:layout_marginRight="20.0dip" android:layout_alignParentTop="true" android:layout_alignParentRight="true" style="@style/TeachBubbleFont" /> 
      </LinearLayout> 
      <RelativeLayout android:gravity="center_vertical" android:id="@+id/RelativeLayoutBtn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="0.0"> 
       <Button android:id="@+id/btn_teach_send" android:layout_width="wrap_content" android:layout_height="35.0dip" android:text="@string/btn_teach_send" android:layout_centerInParent="true" /> 
      </RelativeLayout> 
     </LinearLayout> 
    </ScrollView> 

</LinearLayout> 
+0

可能存在一些問題,在xml中您使用的是編輯文本,而在java文件中則是採取文本視圖。除此之外,不能僅僅通過getText()方法檢查相應的編輯文本是否爲空。並將按鈕設置爲setClickable(false)..... – Android 2012-03-20 06:19:25

回答

1

你只需要的setEnabled按鈕的屬性用於此。如果兩個文本框沒有文本,則禁用按鈕,如果他們有文本,則啓用按鈕。

這裏的例子

String str1, str2; 

str1 = word.getText().toString(); 
str2 = answer.getText().toString(); 

if(!(str1.equals("")) && !(str2.equals(""))) 
{ 
    teach.setEnabled(true); 
} 
else 
{ 
    teach.setEnabled(false); 
} 

編輯

如果你想任何的EditText的得到改變,那麼你需要使用textchangelistner爲儘快檢查。

在這裏我做了一個小例子。它僅在2個edittext具有任何文本時才啓用按鈕。 希望這會幫助你。

public class TSActivity extends Activity { 

    String str = ""; 
    String str1 = ""; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final Button btn = (Button)findViewById(R.id.btn); 
     TextView txt = (TextView)findViewById(R.id.text); 
     TextView txt1 = (TextView)findViewById(R.id.text1); 
     btn.setEnabled(false); 


     txt.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       // TODO Auto-generated method stub 
      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
       // TODO Auto-generated method stub 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 

       str = s.toString(); 
       if(!(str.equals("")) && !(str1.equals(""))) 
       { 
        btn.setEnabled(true); 
       } 
       else 
       { 
        btn.setEnabled(false); 
       } 
      } 
     }); 
/**************************************************************************************************/  
     txt1.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       // TODO Auto-generated method stub    
      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 
       // TODO Auto-generated method stub    
      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 

       str1 = s.toString(); 
       if(!(str.equals("")) && !(str1.equals(""))) 
       { 
        btn.setEnabled(true); 
       } 
       else 
       { 
        btn.setEnabled(false); 
       } 
      } 
     }); 
    } 
} 

謝謝...

+0

嗨,它的作品,但我如何使它保持檢查它? – user1278696 2012-03-20 06:30:53

+0

我把它放在oncreate方法中,但它會自動禁用它,然後當它們中都有文本時它不會重新啓用它 – user1278696 2012-03-20 06:33:27

+0

請參閱我的編輯。我已經發布了正是你想要做的事情。 – 2012-03-20 07:13:00

0

從哪個源的EditText值將set.It取決於是否的EditText值是從特定的聽衆任何行動得到調用上面function.If的EditText值你從任何函數調用設置,函數根據true或false函數使該函數返回類型爲布爾值,並在創建時調用上述步驟。

相關問題