2012-03-20 68 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函数使该函数返回类型为布尔值,并在创建时调用上述步骤。

相关问题