在框架布局上设置动态创建的TextView

时间:2014-02-13 11:01:32

标签: android

我想将一些数据从一个活动传递到另一个活动并将其设置为动态创建的TextView在该活动的框架布局上。我正在使用意图但在第二个活动时数据未被提取..任何人都可以告诉我这个简单的方法.. 以下是我的代码..

Hidden.java

public class Hidden extends Activity implements OnClickListener {
Button btnnameadd, btnnameremove, btnmobileadd, btnmobileremove, btndone;
EditText etname, etmobile;
ImageView ivlogo;
private AlertDialog dialog;
private Uri mImageCaptureUri;
Intent jump;
//options for image selection
private static final int PICK_FROM_CAMERA = 1;
private static final int CROP_FROM_CAMERA = 2;
private static final int PICK_FROM_FILE = 3;
LinearLayout llname, llmobile, llimage;


@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.hidden);
        captureImageInitialization();

        init();

}

private void init() {
    etname=(EditText)findViewById(R.id.editTextname);
    etmobile=(EditText)findViewById(R.id.editTextmobile);
    btnnameadd=(Button)findViewById(R.id.buttonnameadd);
    btnnameremove=(Button)findViewById(R.id.buttonnameremove);
    btnmobileadd=(Button)findViewById(R.id.buttonmobileadd);
    btnmobileremove=(Button)findViewById(R.id.buttonmobileremove);
    btndone=(Button)findViewById(R.id.buttondone);
    llname=(LinearLayout)findViewById(R.id.name);
    llmobile=(LinearLayout)findViewById(R.id.mobile);
    btnnameadd.setOnClickListener(this);
    btnnameadd.setOnClickListener(this);
    btnnameremove.setOnClickListener(this);
    btnmobileadd.setOnClickListener(this);
    btnmobileremove.setOnClickListener(this);
    btndone.setOnClickListener(this);

}

@Override
public void onClick(View v) {
    jump=new Intent(Hidden.this,Framelayout.class);
    if(v.getId()==R.id.buttonnameadd)
    {
        String strname=etname.getText().toString();
        Log.d("Log",strname);
        jump.putExtra("Name",strname);
    }else if(v.getId()==R.id.buttonnameremove)
    {
        btnnameremove.setEnabled(false);
        llname.removeView(findViewById(R.id.editTextname));
    }else if(v.getId()==R.id.buttonmobileadd)
    {
        String strmobile=etmobile.getText().toString();
        Log.d("Log",strmobile);
        jump.putExtra("Mobile",strmobile);
        Log.d("LOG",jump.putExtra("Mobile",strmobile).toString());
    }else if(v.getId()==R.id.buttonmobileremove)
    {
        llmobile.removeView(findViewById(R.id.editTextmobile));         
    }else if(v.getId()==R.id.buttondone)
    {
        Log.d("LOG","1");
        startActivity(jump);
    }
}

}

FrameLayout.java

public class Framelayout extends Activity implements OnClickListener {
FrameLayout frameLayout;
Button b2,b3;
//private ProgressDialog pDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_framelayout);
    frameLayout = (FrameLayout)findViewById(R.id.f1);
     b2=(Button)findViewById(R.id.button2);
     b3=(Button)findViewById(R.id.buttonload);
 b2.setOnClickListener(this);
     b3.setOnClickListener(this);

  }
public void onClick(View v) {
     if(v.getId()==R.id.button2){
        Intent i=new Intent(Framelayout.this,Hidden.class);
        startActivity(i);
    }else if(v.getId()==R.id.buttonload){
        Log.d("Log",getIntent().getStringExtra("Name"));
         editframelayout();
    }
}

private void editframelayout() {
    String name=getIntent().getExtras().getString("Name");
    String mobile=getIntent().getExtras().getString("Mobile");
    TextView tvname=new TextView(this);
    tvname.setText(name);
    tvname.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    tvname.setGravity(Gravity.CENTER);
    TextView tvmobile=new TextView(this);
    tvmobile.setText(mobile);
    tvmobile.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    tvmobile.setGravity(Gravity.CENTER);
    frameLayout.addView(tvname);
    frameLayout.addView(tvmobile);
}

}

2 个答案:

答案 0 :(得分:1)

您必须使用您创建的putExtra()实例的intent重叠方法之一来添加数据。

以下是一个示例:

Intent intent = new Intent(this, SignoutActivity.class); // # this parameter is the context of the caller
intent.putExtra("PARAM_TEXTBOX_TEXT", textboxText);
startActivity(intent);

编辑您添加的代码,您的设计非常差,无法实现预期目标。

每次点击Button时,都会创建Intent新实例。你只是在一个案件中打电话给startActivity()

else if(v.getId()==R.id.buttondone)
{
    Log.d("LOG","1");
    startActivity(jump);
}

现在您假设在之前的按钮点击中添加的参数仍然存在,但它们不是。当您点击buttondone时,您创建了一个Intent的新实例,但没有任何额外内容。

您可以按照以下方式解决此问题:

...
else if(v.getId()==R.id.buttondone)
{
    String strname = etname.getText().toString();
    if (strname != null && !strname.equals(""))
    {
        jump.putExtra("Name",strname);                
    }

    String strmobile = etmobile.getText().toString();
    if (strmobile != null && !strmobile.equals(""))
    {
        jump.putExtra("Mobile",strmobile);            
    }

    startActivity(jump);
}

它仍然没有很好的结构,但可能会为你做到这一点

答案 1 :(得分:0)

使用 getIntent()。getStringExtra(“Name”)而不是 getIntent()。getExtras()。getString(“Name”);

getIntent().getStringExtra("Name")