Intereting Posts
Может ли IntentService работать бесконечно? Сбой слияния в Studio Studio 6.0 Размер стека становится отрицательным после инструкции Как отобразить 2 представления, с эффектом уклонения от градиента на Android? Android – поиск с функцией автоматического завершения внутри панели действий Как программно настроить фокус на виджет кнопки? Отправка данных из Arduino в Android-приложение через Bluetooth Howto обрабатывать mailto: in android webview Почему это утечка памяти Как создавать вкладки панели инструментов с помощью ViewPager в материальном дизайне Как правильно реализовать фид (аналогично Facebook / Instagram) в Android? Длительная операция загрузки при открытии xml-макета на последнем ADT Приложение не поступает по почте программно Лучший способ отправки HTTP GET-запросов синхронно в Android? Класс для упрощения создания потоков фона и синхронизации потоков пользовательского интерфейса

FindViewById, где ID – динамическая строка

У меня есть таблица из 40 квадратов, каждая из которых имеет идентификатор. Когда я передаю Bundle из другого действия, мне нужно извлечь Note, Color и ID из этого пакета. А затем приложение изменит / добавит текст и изменит фон квадрата, указанного в извлеченном идентификаторе. Каждый квадрат имеет идентификатор формата int. Каждый идентификатор, переданный из другого действия, находится в строчном формате. Я не могу понять, как сделать это findViewById (R.id.passed_id) и как получить два разных формата, работающих вместе. Я попытался изменить идентификатор каждого квадрата, но затмение говорит, что идентификатор должен иметь письмо вместе с номером. Я потерялся … Вот код:

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

ОБНОВИТЬ

 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 

Вы можете получить идентификатор из строки, используя:

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

Где VIEW_NAME – любая строка идентификатора, которую вы генерируете. После этого вы можете установить его текст так, как вы сейчас. Это также работает, если вам нужно также получить строки и чертежи, просто измените id на соответствующий тип.

Предполагая, что вы передаете фактическую строку «R.id.passed_id», я рекомендовал бы вместо этого передать целочисленное значение. Таким образом, просто перейдите в R.id.passed_id.

Все значения в файле R приложения – это просто целые числа, которые сопоставляются с местоположениями ресурсов. findById() ищут только целые числа, поэтому, если вы запустите Activity и передаете целочисленное значение ресурса, который вы хотите, он найдет его.

Примечание. Это будет работать, только если ресурсы находятся в одном приложении . R-файлы остаются неизменными для приложения, но они могут меняться из одного приложения в другое, даже если они имеют одинаковое имя. Если, однако, эти два действия относятся к одному и тому же пакету приложений, он будет работать.

Человек, я не понимаю, что именно вы хотите сделать. Id – это id от виджета android, а затем в функции initialize () вы должны использовать строку int так: Integer.ValueOf (Id) Надеюсь, это то, что вы хотите.