2012-12-27 13 views
5

Mam tabelę z 40 kwadratami i każdy ma identyfikator. Kiedy przekazuję pakiet z innej działalności, muszę wyodrębnić notatkę, kolor i identyfikator z tego pakietu. Następnie aplikacja zmieni/doda tekst i zmieni tło kwadratu określone przez wyodrębniony identyfikator. Każdy kwadrat ma identyfikator formatu int. Każdy identyfikator przekazany z innego działania ma format łańcuchowy. Nie mogę wymyślić, jak to zrobić, aby findViewById (R.id.passed_id), i jak uzyskać dwa różne formaty współpracy. Próbowałem zmienić identyfikator każdego kwadratu, ale zaćmienie mówi, że ID musi zawierać literę wraz z numerem. Gubię .... Oto kod:FindViewById gdzie ID jest ciągiem dynamicznym

package com.tt; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.Intent; 
import android.content.res.Resources; 
import android.util.TypedValue; 
import android.view.Gravity; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends Activity 
{ 
String gotNotes; 
String n; 
String gotDOW; 
String gotID; 
public String Id; 
String gotHour; 
TextView notes; 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    initialize(); 
    Button settings = (Button)findViewById(R.id.settings); 

    Bundle gotPackage = getIntent().getExtras(); 
    if (gotPackage != null){ 
    gotNotes = gotPackage.getString("AddedNote"); 
    // if (gotNotes.equals(" ")){n = "Empty";}else n = gotNotes; 
    //gotDOW = gotPackage.getString("Day"); 
    //gotHour = gotPackage.getInt("Hour"); 
    gotID = gotPackage.getString("ID"); 

    Id = gotID; 
    notes.setText(gotNotes + (" \n") + gotID); 

    } 
    else{} 



    settings.setOnClickListener(new OnClickListener() 
    { 



      public void onClick(View v) 
     { 
       Intent i = new Intent(v.getContext(),Settings.class); 
       startActivityForResult(i,0); 
     } 

    }); 

    } 

    private void initialize() 
     { 
    // TODO Auto-generated method stub 


    notes = (TextView)findViewById(R.id.); 
    notes.setGravity(Gravity.CENTER); 
    notes.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12); 
} 



    @Override 
      public boolean onCreateOptionsMenu(Menu menu) 
      { 
       getMenuInflater().inflate(R.menu.activity_main, menu); 
       return true; 

      } 

     } 

UPDATE

Ok.. here's the log: 

12-27 16:18:55.661: D/AndroidRuntime(12497): Shutting down VM 
12-27 16:18:55.661: W/dalvikvm(12497): threadid=1: thread exiting with uncaught exception (group=0x40abf228) 
12-27 16:18:55.671: E/AndroidRuntime(12497): FATAL EXCEPTION: main 
12-27 16:18:55.671: E/AndroidRuntime(12497): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tt/com.tt.MainActivity}: java.lang.NullPointerException 
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2194) 
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2229) 
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.app.ActivityThread.access$600(ActivityThread.java:139) 
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1261) 
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.os.Handler.dispatchMessage(Handler.java:99) 
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.os.Looper.loop(Looper.java:154) 
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.app.ActivityThread.main(ActivityThread.java:4944) 
12-27 16:18:55.671: E/AndroidRuntime(12497): at java.lang.reflect.Method.invokeNative(Native Method) 
12-27 16:18:55.671: E/AndroidRuntime(12497): at java.lang.reflect.Method.invoke(Method.java:511) 
12-27 16:18:55.671: E/AndroidRuntime(12497): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
12-27 16:18:55.671: E/AndroidRuntime(12497): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
12-27 16:18:55.671: E/AndroidRuntime(12497): at dalvik.system.NativeStart.main(Native Method) 
12-27 16:18:55.671: E/AndroidRuntime(12497): Caused by: java.lang.NullPointerException 
12-27 16:18:55.671: E/AndroidRuntime(12497): at com.tt.MainActivity.initialize(MainActivity.java:69) 
12-27 16:18:55.671: E/AndroidRuntime(12497): at com.tt.MainActivity.onCreate(MainActivity.java:30) 
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.app.Activity.performCreate(Activity.java:4531) 
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071) 
12-27 16:18:55.671: E/AndroidRuntime(12497): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2150) 
12-27 16:18:55.671: E/AndroidRuntime(12497): ... 11 more 
+0

P.S. Kiedy ustawiam ID jako statyczny, wszystko działa świetnie .. –

+0

resource.getIdentifier lub coś takiego – njzk2

+0

Przepraszam .. Jestem największym nowicjuszem, którego mógłbyś prawdopodobnie znaleźć ... Nie mam pojęcia, jak to wdrożyć .. –

Odpowiedz

23

można uzyskać identyfikator z ciągu znaków za pomocą:

notes = (TextView)findViewById(getResources().getIdentifier(VIEW_NAME, "id", getPackageName())); 

Gdzie VIEW_NAME jest cokolwiek identyfikator ciąg jesteś generowania. Następnie możesz ustawić tekst tak jak obecnie. Działa to również, jeśli potrzebujesz uzyskać ciągi i rysunki, po prostu zmień id na odpowiedni typ.

1

Zakładając jesteś przejazdem w rzeczywistej ciąg "R.id.passed_id", chciałbym zaleca zamiast tego podawanie wartości całkowitej. Tak więc, po prostu przekazuj R.id.passed_id.

Wszystkie wartości w pliku R aplikacji to po prostu liczby całkowite odwzorowane na lokalizacje zasobów. Metody findById() szukają tylko liczb całkowitych, więc jeśli uruchomisz Activity i przekażesz całkowitą wartość żądanego zasobu, to go znajdziesz.

Uwaga: Działa to tylko wtedy, gdy zasoby znajdują się w tej samej aplikacji. Pliki R pozostają stałe dla aplikacji, ale mogą zmieniać się z jednej aplikacji na inną, nawet jeśli mają taką samą nazwę. Jeśli jednak obie czynności będą objęte tym samym pakietem aplikacji, będzie działać.

+0

Przekazuję tylko m1 (m dla poniedziałku i 1 oznacza przedział czasu) jako ciąg ... –

0

Mężczyzna Nie ukrywam, co dokładnie chcesz robić. Id jest id off android widget następnie na funkcję initialize() oddasz ciąg do int w ten sposób: Integer.valueOf (ID) nadzieję, że to, co chcesz.

+0

Ale czy przejdzie on tylko wartość całkowitą z rzeczywistego identyfikatora, czy też przekaże cały ID (który jest m1 lub m2 lub .. w zależności od przedział czasu i czasu)? –

+0

Zmieniłem przekazaną wartość z ciągu znaków na int, ale teraz aplikacja ulega awarii nawet bez uruchomienia .. –

+0

Dziwne! czy możesz wkleić dzienniki tutaj, aby zobaczyć, gdzie może być problem? – gezimi005