2017-03-05 109 views
-1

我想从我的Main2Activity为MainActivity创建一个新的textview。我试过这个。我究竟做错了什么?将Textview添加到另一个活动

主要活动(这正好与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(从这个活动你suposed添加一个TextView(用的文字EditText上),以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

因为我想添加更多棕褐色的文本视图 –

回答

0

如果你想显示的TE xt in textview in main_activity from activity2然后如果你在xml中创建了textview并且如果他们没有要显示的数据时将它禁用它将会非常容易。从activity2中通过intent和main_activity中所需的数据获取意图,检查数据并在使其可见后在textview中显示数据。

+0

这是一个好主意,但我想为其添加无限文字浏览,这是一个项目列表 –

+0

您可以尝试在回收视图中使用自定义布局。在布局中尝试与上述相同的策略。 – Sadistic

0

也许你可以使用一个BroadcastReceiver有LocalBroadcastManager:

从main2activity初始化广播receicer在主要活动

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

打动你的文本视图创建逻辑主要活动,只是发出一条消息:

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中的包私有方法它更大,但我不能写所有,因为它太长 –

+0

我也改变了一些东西,因为他们给我错误 –

0

一个活动不能在另一个活动中直接创建视图。如果您使用startActivityForResults()开始第二个活动,那么它可以将数据“返回”到您的主要活动。主要活动将创建文本视图。谷歌上述方法获取更多信息。

更好的是,将数据添加到文件或数据库。 MainActivity将在每次启动时读取数据并自动反映任何更改。

对于大量的数据,您应该了解ListView和RecyclerView,以便将多个TextViews轻松添加到活动中。

相关问题