按钮单击事件问题,布局和解析问题?

时间:2011-10-29 17:22:21

标签: android android-layout

我面临三个问题:

  1. 当我点击(+)按钮时,编辑框会出现在按钮下方,而我希望它们显示在上方。 目前正在显示:

       

       

  2. 想要这样:

     <edit text1> <edit text2>
      <edit text3> <edit text4>
      <edit text5> <edit text6>
      <edit text7> <edit text8>
    
      <button>      <button2>
    
    1. 正如您所看到的,我尝试将我从xml获得的编辑文本值解析为docalc()函数,并在文本框中显示该值。但它没有成功。没有给我看。
      1. 我可以在dostuff中解析值吗,如果是,我将如何将这些值与docalc相互关联?
    2. 提前致谢...

      Java代码:

      import android.app.Activity;
      
      import android.os.Bundle;
      import android.view.Gravity;
      import android.view.View;
      import android.view.View.OnClickListener;
      import android.view.ViewGroup.LayoutParams;
      import android.widget.Button;
      import android.widget.EditText;
      import android.widget.LinearLayout;
      import android.widget.TextView;
      
          public class PlusbuttonActivity extends Activity 
          implements OnClickListener  {
      
              TextView tt;
              TextView j;
              EditText amount1;
              EditText amount2;
              double x=0;
              double y=0;
              double a=0;
              double z=0;
              double b=0;
              Button btnButton;
              /** Called when the activity is first created. */
              private LinearLayout root;
              @Override
              public void onCreate(Bundle savedInstanceState) {
                  super.onCreate(savedInstanceState);
                  setContentView(R.layout.main);
                  // modified
                  amount1=(EditText)findViewById(R.id.edittext1);
                  amount2=(EditText)findViewById(R.id.edittext2);
                  // modified 
      
                  View btnButton =(Button) findViewById(R.id.button_next);
                  Button mButton = (Button) findViewById(R.id.button);
                  mButton.setGravity(Gravity.CENTER);
      
                   tt=(TextView)findViewById(R.id.tt);
                   j=(TextView)findViewById(R.id.j);
      
                   root = (LinearLayout) findViewById(R.id.linearLayout);
                   mButton.setOnClickListener(this);
              }
      
                  @Override
                  public void onClick(View v) {
                    switch (v.getId()) {
                       case R.id.button:
                       View view = doStuff();
                        addViewToRoot(view);
                      break;
                       case R.id.button_next:
                           View view1 = doCalc();
                           addViewToRoot(view1);
                           break;
      
                    }
                  }
      
                private View doCalc() {
                      // TODO Auto-generated method stub
                    x=Double.parseDouble(amount1.getText().toString());
                    y=Double.parseDouble(amount2.getText().toString());
                    z=(x*703);
                    tt.setText(Double.toString(z));
                    return tt;
                  }
      
              private View doStuff() {  
                      EditText t = new EditText(PlusbuttonActivity.this);
                      t.setGravity(Gravity.LEFT);
                      t.setWidth(250);
                      EditText a = new EditText(PlusbuttonActivity.this);
                      a.setGravity(Gravity.RIGHT);
                      a.setWidth(250);
                      LinearLayout l = new LinearLayout(PlusbuttonActivity.this);
      
                      t.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                      // t.setBackgroundColor(0xffCECECE);
      
      
                      a.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
      
                      l.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
      
                      l.addView(t);
                      l.addView(a); 
      
                      return l; 
      
      
              }          
      
              private void addViewToRoot(View v){
                root.addView(v);
              }
      
          }
      

      xml文件:

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                       android:orientation="vertical"
                       android:layout_width="fill_parent"
                       android:layout_height="fill_parent"
                       android:id="@+id/linearLayout">
      
      
          <LinearLayout 
                      android:layout_width="fill_parent"
                      android:layout_height="wrap_content"
                       >
      
                  <TextView  
                      android:layout_width="wrap_content" 
                      android:layout_height="wrap_content" 
                      android:gravity="left"
                      android:layout_weight="1"
                      android:text="Units"
                      android:id="@+id/Units"
                      />
                  <TextView android:layout_height="wrap_content" 
                  android:gravity="right" 
                  android:layout_width="wrap_content" 
                  android:layout_weight="1" 
                  android:text="Grades"
                  android:id="@+id/j"></TextView>
              </LinearLayout>
          <LinearLayout android:id="@+id/LinearLayout01" 
                            android:layout_width="wrap_content" 
                            android:layout_height="wrap_content"
                            android:orientation="horizontal">
      
                    <EditText 
                      android:layout_width="250px"     
                      android:layout_height="wrap_content"    
                      android:id="@+id/edittext1">
                    </EditText>
      
                    <EditText     
                      android:layout_height="wrap_content"    
                      android:id="@+id/edittext2" android:layout_width="150dp">
                     </EditText>
              </LinearLayout>
      
          <LinearLayout android:id="@+id/LinearLayout01" 
                            android:layout_width="wrap_content" 
                            android:layout_height="wrap_content"
                            android:orientation="horizontal">
      
                    <EditText 
                      android:layout_width="250px"     
                      android:layout_height="wrap_content"    
                      android:id="@+id/edittext3">
                    </EditText>
      
                    <EditText     
                      android:layout_height="wrap_content"    
                      android:id="@+id/edittext4" android:layout_width="150dp">
                     </EditText>
              </LinearLayout>
      
      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content" >
      
              <Button android:layout_height="wrap_content" 
              android:gravity="center" android:id="@+id/button" android:text="+" android:layout_width="wrap_content"></Button>
      
          <Button
          android:id="@+id/button_next"
          android:layout_height="wrap_content"
          android:layout_width="wrap_content"
          android:layout_alignParentRight="true"
          android:text="CALCULATE"
          >
          </Button>
          </RelativeLayout>
      <TextView android:text="TextView" 
      android:id="@+id/tt" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content"></TextView>
      
      
      
          </LinearLayout>
      

2 个答案:

答案 0 :(得分:2)

首先,将LinearLayout的id设置为main以外的其他ID。像root一样。 Main是包含布局的xml文件的名称,而不是LinearLayout项的id。

其次,不要在EditText的构造函数中使用this,而是使用PlusbuttonActivity.this。因此,将用于创建EditText的行更改为:

EditText t = new EditText(PlusbuttonActivity.this);

您必须执行此操作,因为当您在onClick方法中使用技术上的OnClickListener类时,this引用OnClickListener对象。使用PlusbuttonActivity.this,您明确表示您当前所在的PlusbuttonActivity对象,而不是OnClickListener。

第三,要解决另一个问题,您不能从匿名的OnClickListener类中引用root。您可以将其提取到方法中,而不是调用root.addView(t)。总而言之,我们得到了这个:

import android.app.Activity;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

public class PlusbuttonActivity extends Activity {
    /** Called when the activity is first created. */
    LinearLayout root;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

    Button mButton = (Button) findViewById(R.id.button1);
    root = (LinearLayout) findViewById(R.id.root);
    mButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            EditText t = new EditText(PlusbuttonActivity.this);
            t.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
            addViewToRoot(t);
        } 
    });

    }

    private void addViewToRoot(View v){
      root.addView(v);
    }
}

答案 1 :(得分:0)

  1. 更改idLinearLayout的{​​{1}},使用其他名称。
  2. 保存&amp;清洁项目。
  3. 像上面提到的main.xml一样修复!