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

标签 android

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

隐藏.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);
    }
}

框架布局.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);
}

最佳答案

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

这是一个示例:

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);
}

它的结构仍然不完善,但可能对您有用

关于android - 在框架布局上设置动态创建的 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21752296/

相关文章:

android - 如何访问默认帐户以及发送、接收和回复邮件消息

java - 在 Android 上针对多种屏幕分辨率时使用的最佳做法

android - 单击 Android 操作栏上的 'back' 退出应用程序

android - 如何让 android gradle 项目更喜欢库依赖​​ AAR 而不是 JAR?

android - 如何在我的应用程序中使用 Zxing 库触发批量扫描模式以扫描多个条形码和二维码而不显示预览屏幕

Android:为什么我们需要一个 IBinder 供 Messenger 与 Handler 通信?

android - React Native 无法打开任何 URL

android - 创建 fragment 并向其发送数据

android - 我如何在 android 中实现 SlideShow?

android - 是安卓:allowBackup a security risk for android applications