-1

MainActivityのMainActivityの新しいテキストビューを作成します。私はこれを試した。何が間違っているのですか?別のアクティビティにテキストビューを追加

主な活動(これはactivity_mainとなり、最後にMain2Activityに変更する意図を作る)

package com.example.gabriel.apppapa; 

import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.graphics.Color; 
import android.support.v4.content.LocalBroadcastManager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.*; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.LinearLayout; 
import android.widget.ListView; 
import android.widget.ScrollView; 
import android.widget.Spinner; 
import android.widget.TextView; 


import java.util.Calendar; 


public class MainActivity extends AppCompatActivity { 
    int y,m,a,d,v,r,g; 
    long dr; 
    double idr, dida, dda; 

Spinner Proyecto; 
String Sproyecto; 
TextView nuevo_proyecto; 
MenuItem nuevo; 
Button añadir; 
View ll; 
int dmes; 
BroadcastReceiver textViewReceiver; 


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

    ll = findViewById(R.id.lnlayout); 

    final Calendar calendar = Calendar.getInstance(); 
    y = calendar.get(Calendar.YEAR); 
    m = calendar.get(Calendar.MONTH) + 1; 
    d = calendar.get(Calendar.DAY_OF_MONTH); 
    calcularColor(); 
    cdiasmes(); 
    nuevo = (MenuItem) findViewById(R.id.mas); 
    BroadcastReceiver textViewReceiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      addTextView(); 
     } 
    }; 
    LocalBroadcastManager.getInstance(this).registerReceiver(textViewReceiver, new IntentFilter("createtextview")); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    getMenuInflater().inflate(R.menu.menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.mas: 
      Intent next_screen = new Intent(MainActivity.this, Main2Activity.class); 
      startActivity(next_screen); 
      //finish(); 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 
public void calcularColor(){ 
    idr = y/15.0; 
    dida = idr - ((int)idr); 
    dda = dida*255.0; 
    a = (int)Math.round(dda); 
    g = (int)Math.round(m*255.0/12.0); 
    r = (int)Math.round(d*255.0/28.0); 
} 
public void cdiasmes(){ 
    if(m == 1||m == 3||m == 5||m == 7||m == 8||m == 10||m == 12){ 
     dmes = 31; 
    } 
    else if (m == 4||m == 6||m == 9||m == 11){ 
     dmes = 30; 
    } 
    else { 
     dmes = 28; 
    } 
} 
public void addTextView(){ 
    TextView nproyecto = new TextView(this); 
    nproyecto.setLayoutParams(new ViewGroup.LayoutParams(
      ViewGroup.LayoutParams.MATCH_PARENT, 
      ViewGroup.LayoutParams.WRAP_CONTENT)); 
    nproyecto.setBackgroundColor(Color.rgb(r,g,a)); 

    if(((r+g+a)/3)>382.5){ 
     nproyecto.setTextColor(Color.WHITE); 
    } 
    else { 
     nproyecto.setTextColor(Color.BLACK); 
    } 
    nproyecto.setText(nuevo_proyecto.getText()); 
    ((LinearLayout)ll).addView(nproyecto); 

} 
@Override 
public void onDestroy(){ 
    super.onDestroy(); 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(textViewReceiver); 
} 

} Main2Activity(この活動から、あなたがのTextViewを追加するsuposedされている(のテキスト付きEditText)は、TE activity_mainと表示したい場合は)それをやった後、メインの活動に

package com.example.gabriel.apppapa; 
import android.content.Intent; 
import android.graphics.Color; 
import android.support.v4.content.LocalBroadcastManager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
import java.util.Calendar; 
public class Main2Activity extends AppCompatActivity { 
    int y,m,a,d,g,r,dmes; 
    double idr, dida, dda; 
    Button añadir; 
    View ll; 
    EditText nuevo_proyecto; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main2); 
    final Calendar calendar = Calendar.getInstance(); 
    y = calendar.get(Calendar.YEAR); 
    m = calendar.get(Calendar.MONTH)+1; 
    d = calendar.get(Calendar.DAY_OF_MONTH); 

    nuevo_proyecto = (EditText) findViewById(R.id.nuevo_proyecto_nombre); 
    añadir = (Button) findViewById(R.id.añadir); 

    cdiasmes(); 
    calcularColor(); 

    añadir.setBackgroundColor(Color.rgb(r,g,a)); 
    nuevo_proyecto.setHint(String.valueOf(r)+','+String.valueOf(g)+','+String.valueOf(a)); 

    if ((r+g+a)<383) { 
     añadir.setTextColor(Color.WHITE); 
    } else { 
     añadir.setTextColor(Color.BLACK); 
    } 

    añadir.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      LocalBroadcastManager.getInstance(Main2Activity.this).sendBroadcast(new Intent("createtextview")); 
     } 
    }); 
} 
public void cdiasmes(){ 
    if(m == 1||m == 3||m == 5||m == 7||m == 8||m == 10||m == 12){ 
     dmes = 31; 
    } 
    else if (m == 4||m == 6||m == 9||m == 11){ 
     dmes = 30; 
    } 
    else { 
     dmes = 28; 
    } 
} 
public void calcularColor(){ 
    idr = y/15.0; 
    dida = idr - ((int)idr); 
    dda = dida*255.0; 
    a = (int)Math.round(dda); 
    g = (int)Math.round(m*255.0/12.0); 
    r = (int)Math.round(d*255.0/dmes); 
} 

}

+0

XMLでTextViewを作成し、Javaを使用してデータと背景色を設定するのはなぜですか?そのようにはるかに簡単だろう。 –

+0

私はもっとタン1つのテキストビューを追加したいので、 –

答えて

0

に行きますxtをactivity2のmain_activityのtextviewに入れておけば、xmlでtextviewを作成し、表示するデータがない場合は無効にすると非常に簡単です。 activity2から目的のデータをインテントで渡し、main_activityでインテントを取得し、データをチェックしてから、テキストビューにデータを表示します。

+0

それは良い考えですが、無制限のtextviewsを追加したい、それはプロジェクトのリストです –

+0

リサイクラビューでカスタムレイアウトを試すことができます。レイアウトでは、上記と同じ方法を試してみてください。 – Sadistic

0

たぶん、あなたはLocalBroadcastManagerでBroadcastReceiverを使用することができます。

が主な活動にmain2activityからあなたの主な活動に

 package com.example.gabriel.apppapa; 

     import android.app.Activity; 
     import android.content.Intent; 
     import android.graphics.Color; 
     import android.support.v7.app.AppCompatActivity; 
     import android.os.Bundle; 
     import android.view.Menu; 
     import android.*; 
     import android.view.MenuItem; 
     import android.view.View; 
     import android.view.ViewGroup; 
     import android.widget.ArrayAdapter; 
     import android.widget.Button; 
     import android.widget.LinearLayout; 
     import android.widget.ListView; 
     import android.widget.ScrollView; 
     import android.widget.Spinner; 
     import android.widget.TextView; 


     import java.util.Calendar; 


     public class MainActivity extends AppCompatActivity { 
     int y,m,a,d,v,r,g; 
     long dr; 
     double idr, dida, dda; 

     Spinner Proyecto; 
     String Sproyecto; 
     TextView nuevo_proyecto; 
     MenuItem nuevo; 
     Button añadir; 
     View ll; 
     int dmes; 


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

      ll = findViewById(R.id.lnlayout); 

      final Calendar calendar = Calendar.getInstance(); 
      y = calendar.get(Calendar.YEAR); 
      m = calendar.get(Calendar.MONTH)+1; 
      d = calendar.get(Calendar.DAY_OF_MONTH); 
      calcularColor(); 
      cdiasmes(); 
      nuevo = (MenuItem) findViewById(R.id.mas); 

      //add this 
      BroadcastReceiver textViewReceiver= new BroadcastReceiver() 
     { 

      @Override 
      public void onReceive(Context context, Intent intent) 
      { 
       addTextView() 
      } 
     }; 
    LocalBroadcastManager.getInstance(this).registerReceiver(textViewReceiver, new IntentFilter("createtextview")); 
     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu){ 
      getMenuInflater().inflate(R.menu.menu, menu); 
      return true; 
     } 

     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      switch (item.getItemId()) { 
       case R.id.mas: 
        Intent next_screen = new Intent(MainActivity.this, Main2Activity.class); 
        startActivity(next_screen); 
        //finish(); 
       default: 
        return super.onOptionsItemSelected(item); 
      } 
     } 
     public void calcularColor(){ 
      idr = y/15.0; 
      dida = idr - ((int)idr); 
      dda = dida*255.0; 
      a = (int)Math.round(dda); 
      g = (int)Math.round(m*255.0/12.0); 
      r = (int)Math.round(d*255.0/28.0); 
     } 
     public void cdiasmes(){ 
      if(m == 1||m == 3||m == 5||m == 7||m == 8||m == 10||m == 12){ 
       dmes = 31; 
      } 
      else if (m == 4||m == 6||m == 9||m == 11){ 
       dmes = 30; 
      } 
      else { 
       dmes = 28; 
      } 
     } 
    // move from main2activity 
    public void addTextView(){ 
     TextView nproyecto = new TextView(this); 
     nproyecto.setLayoutParams(new ViewGroup.LayoutParams(
       ViewGroup.LayoutParams.MATCH_PARENT, 
       ViewGroup.LayoutParams.WRAP_CONTENT)); 
     nproyecto.setBackgroundColor(Color.rgb(r,g,a)); 

     if(((r+g+a)/3)>382.5){ 
      nproyecto.setTextColor(Color.WHITE); 
     } 
     else { 
      nproyecto.setTextColor(Color.BLACK); 
     } 
     nproyecto.setText(nuevo_proyecto.getText()); 
     ((LinearLayout)ll).addView(nproyecto);*/this linear layout is from MainActivity*/ 


     } 
    //add this to avoid memory leaks 
     @Override 
     public void onDestroy(){ 
      LocalBroadcastManager.getInstance(this).unregisterReceiver(textViewReceiver); 
     } 
    } 

移動しますが、テキストビューの作成ロジックをブロードキャストreceicerを初期化し、単にメッセージを発します。

package com.example.gabriel.apppapa; 
import android.graphics.Color; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
import java.util.Calendar; 
public class Main2Activity extends AppCompatActivity { 
    int y,m,a,d,g,r,dmes; 
    double idr, dida, dda; 
    Button añadir; 
    View ll; 
    EditText nuevo_proyecto; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main2); 
    final Calendar calendar = Calendar.getInstance(); 
    y = calendar.get(Calendar.YEAR); 
    m = calendar.get(Calendar.MONTH)+1; 
    d = calendar.get(Calendar.DAY_OF_MONTH); 

    nuevo_proyecto = (EditText) findViewById(R.id.nuevo_proyecto_nombre); 
    añadir = (Button) findViewById(R.id.añadir); 

    cdiasmes(); 
    calcularColor(); 

    añadir.setBackgroundColor(Color.rgb(r,g,a)); 
    nuevo_proyecto.setHint(String.valueOf(r)+','+String.valueOf(g)+','+String.valueOf(a)); 

    if ((r+g+a)<383) { 
     añadir.setTextColor(Color.WHITE); 
    } else { 
     añadir.setTextColor(Color.BLACK); 
    } 

    añadir.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // emit a message to mainactivity 
      LocalBroadcastManager.getInstance(Main2Activity.this).sendBroadcast(new Intent("createtextview")); 

     } 
    }); 
} 
public void cdiasmes(){ 
    if(m == 1||m == 3||m == 5||m == 7||m == 8||m == 10||m == 12){ 
     dmes = 31; 
    } 
    else if (m == 4||m == 6||m == 9||m == 11){ 
     dmes = 30; 
    } 
    else { 
     dmes = 28; 
    } 
} 
public void calcularColor(){ 
    idr = y/15.0; 
    dida = idr - ((int)idr); 
    dda = dida*255.0; 
    a = (int)Math.round(dda); 
    g = (int)Math.round(m*255.0/12.0); 
    r = (int)Math.round(d*255.0/dmes); 
} 
} 
+0

問題を解決していますか? – Cochi

+0

これは私にエラーが表示されます:'03 -05 19:31:04.439 870-870/com.example.gabriel.apppapa W/art:Android 4.1以前は、メソッドint android.support.v7.widget.ListViewCompat.lookForSelectablePosition int、boolean)は、android.widget.ListViewのpackage-privateメソッドを間違ってオーバーライドしていましたが、大きすぎますが、長すぎるため、すべてを書き込めません。 –

+0

また、私はエラーを出したのでいくつか変更しました –

0

1つのアクティビティで別のビューを直接作成することはできません。 startActivityForResults()を使用して2番目のアクティビティを開始すると、メインアクティビティにデータを返すことができます。メインアクティビティでテキストビューが作成されます。 Googleは、より多くの情報のための上記の方法。

さらに、データをファイルまたはデータベースに追加します。 MainActivityは起動するたびにデータを読み込み、変更を自動的に反映します。

大量のデータの場合、複数のTextViewをアクティビティに簡単に追加するために、ListViewとRecyclerViewについて学ぶ必要があります。

関連する問題