es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo pasar datos de la actividad principal a una clase de vista.

Estoy intentando pasar dos arrays diferentes a la clase BarActivity, pero es una clase View y no me permite utilizar Intent para pasar la información como pensé que podría hacerlo. ¿Hay alguna manera de que pueda pasar estos arrays a la actividad de barras para poder empezar a hacer el gráfico de barras?

Esta es la actividad principal.

public class MainActivity extends AppCompatActivity {

EditText editText;
ListView listView;
ListAdapter listAdapter;
Button btnCompute;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

editText=findViewById(R.id.edittext);
listView=findViewById(R.id.listView);
btnCompute=findViewById(R.id.btnCompute);

editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_DONE)
        {

            try
            {

                if(editText.getText().toString().isEmpty())
                {
                    listAdapter=null;
                    listView.setAdapter(null);
                }
                else
                {
                    String[] arr =editText.getText().toString().split(",");
                    Intent i = new Intent(MainActivity.this,BarActivity.class);
                    i.putExtra("Grades", arr);
                    startActivity(i);
                    listAdapter=new ListAdapter(MainActivity.this,arr);
                    listView.setAdapter(listAdapter);
                }

            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
            return true;
        }
        return false;
    }
});

btnCompute.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if(listAdapter!=null)
        {

            Integer [] list=listAdapter.getList();
            Intent intent = new Intent(MainActivity.this,BarActivity.class);
            intent.putExtra("Values", list);
            startActivity(intent);
        }
    }
});

}
}

Y esta es la BarActivity.

public class BarActivity extends View {
//hash map
Map<string, float=””> data = new HashMap<>();
private float barWidth = 60f;
private float barSpace = 20f;
private Paint mPaint;

// Intent i = getIntent();
// String[] myGrades = i.getStringArrayExtra(“Grade”);
// Intent intent = Intent.getIntentOld();
// String[] myValues = intent.getStringArrayExtra(“Values”);
public BarActivity(Context context, AttributeSet attrs) throws URISyntaxException {
super(context, attrs);

mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
// mRandom = new Random();

data.put("A", 0.20f);
data.put("A-", 0.12f);
data.put("F", 0.1f);

}
@Override
protected void onDraw(Canvas canvas) {

  }

}

La parte comentada // Intent i = getIntent() no funciona en absoluto; me dice que use getIntentOld() en su lugar, lo cual tampoco funciona.</string,>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para pasar dos arrays diferentes a la clase BarActivity, puede crear un constructor en la clase BarActivity que tome dos arrays como argumentos. Luego, en la clase MainActivity, puede crear una instancia de la clase BarActivity utilizando el constructor y pasar los dos arrays como argumentos. Aquí hay un ejemplo:

    En la clase BarActivity:

    public class BarActivity extends View {
        // mapa hash
        Map<string, float=""> data = new HashMap<>();
        private float barWidth = 60f;
        private float barSpace = 20f;
        private Paint mPaint;
        private String[] grades;
        private Integer[] values;
    
        public BarActivity(Context context, AttributeSet attrs, String[] grades, Integer[] values) throws URISyntaxException {
            super(context, attrs);
    
            mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    
            this.grades = grades;
            this.values = values;
    
            for (int i = 0; i < grades.length; i++) {
                data.put(grades[i], values[i] / 100f);
            }
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            // Dibuje el gráfico de barras utilizando los valores en el HashMap de datos
        }
    }
    

    En la clase MainActivity:

    public class MainActivity extends AppCompatActivity {
        EditText editText;
        ListView listView;
        ListAdapter listAdapter;
        Button btnCompute;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            editText = findViewById(R.id.edittext);
            listView = findViewById(R.id.listView);
            btnCompute = findViewById(R.id.btnCompute);
    
            editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    if (actionId == EditorInfo.IME_ACTION_DONE) {
                        try {
                            if (editText.getText().toString().isEmpty()) {
                                listAdapter = null;
                                listView.setAdapter(null);
                            } else {
                                String[] arr = editText.getText().toString().split(",");
                                listAdapter = new ListAdapter(MainActivity.this, arr);
                                listView.setAdapter(listAdapter);
    
                                Integer[] values = listAdapter.getList();
    
                                BarActivity barActivity = new BarActivity(MainActivity.this, null, arr, values);
                                setContentView(barActivity);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        return true;
                    }
                    return false;
                }
            });
    
            btnCompute.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (listAdapter != null) {
                        Integer[] values = listAdapter.getList();
    
                        BarActivity barActivity = new BarActivity(MainActivity.this, null, grades, values);
                        setContentView(barActivity);
                    }
                }
            });
        }
    }
    

    En el código anterior, cuando el usuario ingresa calificaciones en el campo de EditText y hace clic en el botón “Calcular”, se muestra el BarActivity con el gráfico de barras de las calificaciones y sus valores correspondientes. Cuando el usuario ingresa un nuevo conjunto de calificaciones, se actualiza el ListView, y cuando el usuario hace clic en el botón “Calcular” nuevamente, el BarActivity se actualiza con los nuevos datos.</string,>

Comments are closed.