-1

내 MainActivity에서 내 MainActivity에 대한 새 텍스트 뷰를 만들고 싶습니다. 나는 이것을 시도했다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?다른 활동에 텍스트 뷰 추가

주요 활동 (이 activity_main로 이동하고 마지막에 Main2Activity로 변경하는 의도한다) 당신이 텍스트와 텍스트 뷰를 (추가 suposed되는이 활동에서

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을 (글고 치기는) 테 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

나는 tan one textview를 더 추가하고자하기 때문에 –

답변

0

를 이동 xt는 text_view에서 activity2의 main_activity에 저장하면 textview를 XML로 만들고 표시 할 데이터가없는 경우 사용하지 않도록 설정하면 매우 쉽습니다. activity2에서 필요한 데이터를 인 텐트로 전달하고 main_activity에서 인 텐트를 가져 와서 데이터를 확인한 후 텍스트 뷰에 데이터를 표시합니다.

+0

좋은 생각이다. 무제한 textviews를 프로젝트에 추가하고 싶다. –

+0

리사이클 러 뷰에서 사용자 정의 레이아웃을 사용해 볼 수있다. 레이아웃에서 위와 같은 전술을 시도하십시오. – Sadistic

0

어쩌면 당신은 LocalBroadcastManager와 브로드 캐스트 리시버를 사용할 수 있습니다

이 주요 활동에 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)은 package-private 메서드를 android.widget.ListView에서 잘못 재정의했습니다. 너무 큽니다. 그러나 너무 길기 때문에이 코드를 모두 쓸 수 없습니다. –

+0

또한 오류가 발생하여 일부 변경되었습니다. –

0

하나의 활동은 다른보기에서 직접보기를 작성할 수 없습니다. startActivityForResults()을 사용하여 두 번째 활동을 시작하면 주 활동으로 데이터를 "반환"할 수 있습니다. 주 활동은 텍스트보기를 만듭니다. 구글 자세한 정보 위의 방법.

더 나은 것은 파일이나 데이터베이스에 데이터를 추가하는 것입니다. MainActivity는 시작될 때마다 데이터를 읽고 변경 사항을 자동으로 반영합니다.

많은 양의 데이터를 얻으려면 여러 텍스트 뷰를 활동에 쉽게 추가 할 수 있도록 ListView 및 RecyclerView에 대해 알아야합니다.