-1

I want to create a new textview for my MainActivity from my Main2Activity. I've tried this. What am i doing wrong?

Main Activity (this goes with activity_main and at the end makes an intent to change to 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(from this activity you are suposed to add a Textview (with the text of the EditText) to activity_main and go to the main activity after doing it)

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

}

3 Answers3

0

If you want to display the text in textview in main_activity from activity2 then it would be quite easy if you make the textview in the xml and disable it if their is no data to display. From activity2 pass the required data in intent and in main_activity get the intent, check the data and display the data in the textview after making it visible.

Sadistic
  • 541
  • 4
  • 12
0

Maybe you can use a BroadcastReceiver with a LocalBroadcastManager:

Initialize a broadcast receicer in your main activity

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

Move you text view creation logic from main2activity to main activity and just emit a message :

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);
}
}
Cochi
  • 2,199
  • 2
  • 12
  • 15
0

One activity cannot directly create views in another. If you start the second activity using startActivityForResults() then it can "return" data to your main activity. The main activity will then create the text view. Google the above method for more info.

Better yet, add the data to a file or database. MainActivity will just read the data every time it starts and automatically reflect any changes.

For large amounts of data you should learn about ListView and RecyclerView for easily adding multiple TextViews to an activity.

Code-Apprentice
  • 81,660
  • 23
  • 145
  • 268