2017-02-07 9 views
0

私は(明らかに)AndroidとJavaプログラミングの新機能です。 私はかなり長いスクリプトを持っており、この質問のほとんどを残しています。私は疑問を持っている何 はこれです:アンドロイドスタジオのスクロール可能なビューに複数のテキストビューを追加するには

ScrollView scroller = (ScrollView) findViewById(R.id.Scrollview); // Find Scrollview 
     scroller.removeAllViews();// Kill Scrollview's child from last time this ran (and I hope its children?) 
     LinearLayout scrollvert = new LinearLayout(this); // Make a new linear layout... WTF is "this" 
     scrollvert.setOrientation(LinearLayout.VERTICAL);// Make it a vertical layout 
     scroller.addView(scrollvert); // add this layout to Scrollview (scroller) 
     TextView[] tv=new TextView[epointer]; // Going to add some text views 

     for (int i = 0; i <= epointer; i++) {   // does stuff that creates a stringbuilder called textLog 
      tv[i] = new TextView(this); // <--- Dies here! 
      tv[i].setText(textLog); 
      scroller.addView(tv[i]);  } 

私はすでに私のxmlからScrollviewという名前ScrollViewを持っています。これに垂直なLinearLayoutを追加して、スクロール可能なビューに複数のTextViewを追加することができます(後で、特定の項目をクリックして変更または削除できます)。

これまでのところ私の結果は、「新しいTextView」の部分に到達すると死ぬという結果です。 私は自分の問題が「文脈」を理解していないと信じています。私は過去数週間に1件の記事を読んできましたが、すべて「this」、「context」、「getContext」、または「getApplicationContext」を使用すると言われていますが、実際にはどういう意味で、私はやろうとしている。

私は間違っていますか?それをどうやって修正することができますか?私がやろうとしていることをやるより良い方法があれば、それを聞きたいですが、ここで間違っていることを理解したいと思っています。

ありがとうございました。

私は、以下のログの関連部分を追加しました:(MainActivity.java:199は「それは死ぬ」場所です)

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: com.russdell.ytthourcalculator, PID: 3544 
       java.lang.IllegalStateException: Could not execute method for android:onClick 
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
        at android.view.View.performClick(View.java:5698) 
        at android.widget.TextView.performClick(TextView.java:10888) 
        at android.view.View$PerformClick.run(View.java:22570) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:158) 
        at android.app.ActivityThread.main(ActivityThread.java:7231) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
       Caused by: java.lang.reflect.InvocationTargetException 
        at java.lang.reflect.Method.invoke(Native Method) 
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
        at android.view.View.performClick(View.java:5698)  
        at android.widget.TextView.performClick(TextView.java:10888)  
        at android.view.View$PerformClick.run(View.java:22570)  
        at android.os.Handler.handleCallback(Handler.java:739)  
        at android.os.Handler.dispatchMessage(Handler.java:95)  
        at android.os.Looper.loop(Looper.java:158)  
        at android.app.ActivityThread.main(ActivityThread.java:7231)  
        at java.lang.reflect.Method.invoke(Native Method)  
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  
       Caused by: java.lang.ArrayIndexOutOfBoundsException: length=0; index=0 
        at com.russdell.ytthourcalculator.MainActivity.calculate(MainActivity.java:199) 
        at com.russdell.ytthourcalculator.MainActivity.ME(MainActivity.java:83) 
        at java.lang.reflect.Method.invoke(Native Method)  
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
        at android.view.View.performClick(View.java:5698)  
        at android.widget.TextView.performClick(TextView.java:10888)  
        at android.view.View$PerformClick.run(View.java:22570)  
        at android.os.Handler.handleCallback(Handler.java:739)  
        at android.os.Handler.dispatchMessage(Handler.java:95)  
        at android.os.Looper.loop(Looper.java:158)  
        at android.app.ActivityThread.main(ActivityThread.java:7231)  
        at java.lang.reflect.Method.invoke(Native Method)  
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  
+0

"ここに死ぬ!"実際問題の適切な説明ではありません。クラッシュしている場合は、スタックトレースを見てください。 http://stackoverflow.com/questions/23353173/unfortunately-myapp-has-stopped-how-can-i-solve-this http://stackoverflow.com/questions/3988788/what-is-a-stack-trace -and-how-can-i-use-it-to-debug-my-application-errors _n_項目の配列は_n-1_の最大インデックスを持つので、あなたの 'for'ループは実行されています1つは遠すぎる。 –

+0

"Logcat"を使用すると、問題の内容がわかります。 https://www.youtube.com/watch?v=QUkS6CfzK9M --- https://www.youtube.com/watch?v=QqjrR11tuz0 – Tasos

+0

「ここで死ぬ!」とは何も見ません。あなたはあなたのログを投稿するべきです。 –

答えて

0

あなたはscrollviewに一つだけ子を追加することができます。 だから、これは

ScrollView scroller = (ScrollView) findViewById(R.id.Scrollview); // Find Scrollview 
     scroller.removeAllViews();// Kill Scrollview's child from last time this ran (and I hope its children?) 
     LinearLayout scrollvert = new LinearLayout(this); // Make a new linear layout 
     scrollvert.setOrientation(LinearLayout.VERTICAL);// Make it a vertical layout 
     scroller.addView(scrollvert); // add this layout to Scrollview (scroller) 
     TextView[] tv=new TextView[epointer]; // Going to add some text views 

     for (int i = 0; i < epointer; i++) {  //use this line to remove exception of indexoutofbound  
      tv[i] = new TextView(this); 
      tv[i].setText(textLog); 
      scrollvert.addView(tv[i]); //make this change. Adding to linear layout which is only one child of scrollview. 
      } 

を変更しますあなたはビューをスクロールするために、複数のTextViewを追加している、ここでscroller.addView(tv[i]);

コンテキスト

コンテキストは、様々な環境を表しているアプリケーション/ object.Itsエンティティの現在の状態の文脈でデータ。コンテキストは、現在のアクティビティが、ローカルファイル、データベース、環境に関連付けられたクラスローダ、システムレベルのサービスを含むサービスなど、外部のアンドロイド環境と対話するのに役立ちます。

は、それがこの

for (int i = 0; i < epointer; i++) {   
     TextView tv = new TextView(this); // will not die anywhere 
     tv.setText(textLog); 
     scrollvert.addView(tv); // these views should be added to linear layout not scroll view 

他の方法は、直接XMLにのLinearLayoutを追加し、これらすべてのテキストビューを追加する前に、それをクリアすることができようにそれを行うことができますi<epointer でなければなりませんthis

0
TextView[] tv=new TextView[epointer]; // Going to add some text views 

for (int i = 0; i <= epointer; i++) { // total epointer+1 size???? 

を参照してください。 。 これがあなたの問題を解決することを願っています。

関連する問題