2017-05-28 8 views
0

J'ai fait un TableLayout 3x3 dans "Activité A" (Choisissez une disposition de table, parce que je pensais que cela correspond à mes besoins) 7 des 9 cellules sont cliquables et ouvertes "Activité B "qui est un sélecteur de numéro personnalisé que j'ai fait. J'ai utilisé une intention de passer un tableau et d'autres données à l'activité B L'idée de mon sélecteur de nombres est de définir une valeur dans la cellule que j'ai cliqué dans Activiy A (je voulais quelque chose comme calendarDatePicker) Dans "Activité B" J'ai une méthode pour mettre à jour les valeurs de "Activité A" et finir() "Activité B" quand on clique sur une image qui fonctionne très bien sauf qu'elle ne définit pas la valeur pour le texte cliquéComment accéder à un TextView situé dans une disposition de table

Comment J'ai défini TextValue à partir d'une autre activité lorsque TextValue est contenu dans une disposition de table?

Je n'utilise pas l'intention, car honnêtement, je ne sais pas comment le gérer lorsque l'activité B est fermée. Je veux dire où dans "Activité A" devrais-je gérer cette intention de "Activité B"

En utilisant le débogueur, j'ai découvert qu'essayer de définir le texte en utilisant l'Id TextView ne fonctionne pas car il montre un objet "nul" dans le débogueur.

Activiy A

package com.example.racu.threebythree; 


public class threebythree extends AppCompatActivity { 

    public static ArrayList<Integer> ColumnA = new ArrayList<Integer>(); 
    public static ArrayList<Integer> ColumnB = new ArrayList<Integer>(); 
    public static ArrayList<Integer> ColumnC = new ArrayList<Integer>(); 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_three_by_three); 

     for (int i = 1; i < 28; i++) { 
      if (i > 0 && i < 10) 
       ColumnA.add(i); 
      if (i > 10 && i < 19) 
       ColumnB.add(i); 
      if (i > 19 && i < 28) 
       ColumnC.add(i); 
     } 

    } 

    public void openNumberPicker(View v) { 

//  I used this to "guess" the location of the cell in the table layout as I could not find a way to do it. 

     String cellName = v.getResources().getResourceName(v.getId()); 
     String cellLetter = cellName.substring(cellName.lastIndexOf("/") + 1); 

//  Send intent 

     Intent intent = new Intent(this, NumberPicker.class); 
     intent.putExtra("Id", (cellLetter.substring(0, 1) + cellLetter.substring(2)).toUpperCase()); 

     switch (cellLetter.substring(0, 1)) { 
      case ("a"): 
       intent.putIntegerArrayListExtra("Column", ColumnA); 
       break; 
      case ("b"): 
       intent.putIntegerArrayListExtra("Column", ColumnB); 
       break; 
      case ("c"): 
       intent.putIntegerArrayListExtra("Column", ColumnC); 
       break; 
     } 
     intent.putExtra("Cell ID", v.getId()); 

     startActivity(intent); 
    } 

} 

Avtivity B

package com.example.racu.threebythree; 

public class NumberPicker extends AppCompatActivity { 

    GridView numberPicker; 
    ArrayList<Integer> numbersToDisplay; 
    TextView viewToDisplay; 

    ImageView ok, cancel; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_number_picker); 
     numberPicker = (GridView) findViewById(R.id.arrayNumbers); 
     viewToDisplay = (TextView) findViewById(R.id.number_to_select); 
     ok = (ImageView) findViewById(R.id.add_number_to_card); 
     ok.setClickable(false); 

     Intent intent = getIntent(); 
     String idFromIntent = intent.getStringExtra("Id"); 
     numbersToDisplay = intent.getIntegerArrayListExtra("Letter"); 
     TextView numberPosition = (TextView) findViewById(R.id.numberPosition); 
     numberPosition.setText(idFromIntent); 
     final TextView chosenNumber = (TextView) findViewById(R.id.chosenNumber); 

     ArrayAdapter<Integer> adapter = new ArrayAdapter<Integer>(this, R.layout.number_for_picker, numbersToDisplay); 
     numberPicker.setAdapter(adapter); 

     numberPicker.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

      public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

       chosenNumber.setText(((TextView) v).getText()); 
       ok.setImageResource(R.drawable.ok_blue); 
       ok.setClickable(true); 
      } 
     }); 

    } 

    public void updateThreByThree(View v) { 

     Intent intent = getIntent(); 
     int currentCell = intent.getIntExtra("Cell ID", 0); 
     String idFromIntent = intent.getStringExtra("Id").substring(0, 1); 

     TextView chosenNumber = (TextView) findViewById(R.id.chosenNumber); 

// Here I try to Set the text to the cell in Activity A, using its R.id, but in the debugger I get a null reference, therefore my app crashes 
     TextView currentCellToEdit = (TextView) findViewById(currentCell); 
     currentCellToEdit.setText(chosenNumber.getText()); 

     int temp = Integer.parseInt(chosenNumber.getText().toString()); 


     switch (idFromIntent) { 
      case "A": 
       threebythree.ColumnA.remove(Integer.valueOf(temp)); 
       break; 
      case "B": 
       threebythree.ColumnB.remove(Integer.valueOf(temp)); 
       break; 
      case "C": 
       threebythree.ColumnC.remove(Integer.valueOf(temp)); 
       break; 
     } 
     finish(); 
    } 

    public void cancel(View view) { 

     finish(); 
    } 
} 

Merci à Pavan pour l'indice j'ai trouvé deux autres très utiles après here et ce one correspondait exactement à ce que je cherchais.

+0

pas en mesure d'obtenir la question peut être u veulent obtenir des données d'autres activités à la suite https://developer.android. com/training/basics/intents/result.html – Pavan

+1

Merci @Pavan, c'est ce que je cherchais, même si votre lien a été un peu confus, pour moi, trouvé votre queue très utile. J'ai trouvé quelques autres liens utiles ici dans StackOverFlow grâce à votre indice. [https://stackoverflow.com/questions/10407159/how-to-manage-startactivityforresult-on-android?answertab=votes#tab-top] – Racu

Répondre

1

Comme ça (assurez-vous de donner le TableLayout un id):

TableLayout tl = (TableLayout)findViewById(R.id.tableLayout); 
TextView tv = (TextView)tl.findViewById(R.id.textView); 
+0

Essayé mais ne fonctionnait pas, je ne pouvais pas faire une référence à la Texview , Je crois que c'est parce que j'essayais de l'appeler d'une activité différente, pas sa propre. Ty – Racu