2013-08-18 79 views
0

我搜索過其他similiar的問題,我已經發現了一些,但奇怪的是他們沒有對我的工作,我不知道我做錯了什麼......如何以編程方式將TextView添加到現有的RelativeLayout?

public class MainActivity extends Activity { 

EditText item; 
Button insert; 
RelativeLayout layout; 

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

    item = (EditText) findViewById(R.id.item); 
    layout = (RelativeLayout) findViewById(R.id.layout); 
} 

@Override 
public void onResume() { 
    super.onResume(); 

    insert.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      String s_item = item.getText().toString(); 
      TextView tv = new TextView(MainActivity.this); 

      layout.addView(tv); 
      tv.setText(s_item); 
     } 
    }); 
} 

} 

應用程序啓動時,它只是崩潰......而問題是在此代碼顯然...

logcat的

08-18 14:37:19.425 2981-2981/? E/AndroidRuntime: FATAL EXCEPTION: main 
    java.lang.RuntimeException: Unable to resume activity {g.d.raven/g.d.raven.MainActivity}: java.lang.NullPointerException 
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2124) 
    at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2139) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1672) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:130) 
    at android.app.ActivityThread.main(ActivityThread.java:3687) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:507) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
    at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
    at g.d.raven.MainActivity.onResume(MainActivity.java:30) 
    at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1150) 
    at android.app.Activity.performResume(Activity.java:3832) 
    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2114) 
    ... 12 more 
08-18 14:37:19.429  130-143/? E/: Dumpstate > /data/log/dumpstate_app_error 

謝謝大家,我發現我自己剛纔忘了實例化按鈕XD

+0

後logcat請 – idanakav

+0

你有早些時候調用你的findViewById嗎?發佈更多代碼plz。 – TeeTracker

+0

按要求編輯 – DomeWTF

回答

0

試試這個:

insert.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     TextView tv; 
     String s_item = item.getText().toString(); 
     tv = new TextView(MainActivity.this); 
     layout.addView(tv); 
     tv.setText(s_item); 
    } 
}); 
+0

沒有什麼改變... – DomeWTF

+0

好吧,在觀看LogCat時,在你的MainActivity中,在線號爲30 處有一些問題'at g.d.raven.MainActivity.onResume(MainActivity.java:30)' –

0

首先ü需要initilaze 按鈕插入

試試這個:

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 

public class MainActivity extends Activity { 
    EditText item; 
    Button insert; 
    RelativeLayout layout; 

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

     item = (EditText) findViewById(R.id.editText1); 
     layout = (RelativeLayout) findViewById(R.id.relative); 
     insert = (Button) findViewById(R.id.button1); 
     insert.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Button b = (Button) view; 
       String s_item = b.getText().toString(); 
       TextView tv = new TextView(MainActivity.this); 
       layout.addView(tv); 
       tv.setText(s_item); 
      } 
     }); 
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 

    } 
} 
0
LinearLayout linearLayout = new LinearLayout(this); 

RelativeLayout.LayoutParams relativeParams = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 
relativeParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); 

parentView.addView(linearLayout, relativeParams); 

所有信貸sechastain,以編程方式相對定位您的項目你必須爲他們分配ID。

TextView tv1 = new TextView(this); 
tv1.setId(1); 
TextView tv2 = new TextView(this); 
tv2.setId(2); 

然後addRule(RelativeLayout.RIGHT_OF,tv1.getId());

相關問題