J'ai une question, tout le monde.
Je veux utiliser getResource.getIdentifier()
pour obtenir mon élément de mise en page en XML (layout/xxx.xml).
Mais je rencontre le message d'erreur "L'ID de ressource # 0x7f070003 type # 0x12 n'est pas valide ...".
Je ne sais pas comment résoudre ce problème.
J'utilise une méthode de retour linéaire.
C'est mon code ci-dessous:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWeekOfDay(2).setBackgroundColor(Color.RED);
}
private LinearLayout getWeekOfDay(int n)
{
int layoutID = getResources().getIdentifier("layout"+n, "id", getPackageName());
return (LinearLayout) LayoutInflater.from(this).inflate(layoutID, null);
}
....
...
..
}
Ma mise en page a de nombreux linéaires, mais le nom est similaire (mise en page1, mise en page2, mise en page3 ...).
Je veux utiliser la méthode d'appel get element de nomination.
mon code de mise en page est ci-dessous:
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/LinearLayout1"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
tools:context=".MainActivity" >
<LinearLayout
Android:id="@+id/layout1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="0.37"
Android:background="#cccccc" >
<TextView
Android:id="@+id/TextView03"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="test1" />
</LinearLayout>
<LinearLayout
Android:id="@+id/layout2"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="0.37"
Android:background="#cccccc" >
<TextView
Android:id="@+id/TextView02"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="test2" />
</LinearLayout>
<LinearLayout
Android:id="@+id/layout3"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="0.37"
Android:background="#cccccc" >
<TextView
Android:id="@+id/TextView01"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="test3" />
</LinearLayout>
<LinearLayout
Android:id="@+id/layout4"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="0.37"
Android:background="#cccccc" >
<TextView
Android:id="@+id/textView1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="test4" />
</LinearLayout>
Mais le code Java renverra une erreur.
Le message d'erreur est ci-dessous:
: FATAL EXCEPTION: main
: Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testdemo/com.example.testdemo.MainActivity}: Android.content.res.Resources$NotFoundException: Resource ID #0x7f070003 type #0x12 is not valid
: at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2194)
: at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2229)
: at Android.app.ActivityThread.access$600(ActivityThread.Java:139)
: at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1261)
: at Android.os.Handler.dispatchMessage(Handler.Java:99)
: at Android.os.Looper.loop(Looper.Java:154)
: at Android.app.ActivityThread.main(ActivityThread.Java:4945)
: at Java.lang.reflect.Method.invokeNative(Native Method)
: at Java.lang.reflect.Method.invoke(Method.Java:511)
: at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:784)
: at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:551)
: at dalvik.system.NativeStart.main(Native Method)
: Caused by: Android.content.res.Resources$NotFoundException: Resource ID #0x7f070003 type #0x12 is not valid
: at Android.content.res.Resources.loadXmlResourceParser(Resources.Java:2358)
: at Android.content.res.Resources.getLayout(Resources.Java:952)
: at Android.view.LayoutInflater.inflate(LayoutInflater.Java:394)
: at Android.view.LayoutInflater.inflate(LayoutInflater.Java:352)
: at com.example.testdemo.MainActivity.getWeekOfDay(MainActivity.Java:25)
: at com.example.testdemo.MainActivity.onCreate(MainActivity.Java:19)
: at Android.app.Activity.performCreate(Activity.Java:4531)
: at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1071)
: at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2150)
: ... 11 more
Quelqu'un connaît-il ce problème? Comment résoudre ce problème?
Avec ça:
int layoutID = getResources().getIdentifier("layout"+n, "layout", getPackageName());
vous récupérez essentiellement l'ID d'un fichier de mise en page que vous pouvez gonfler. C'est la version dynamique de
int layoutID = R.layout.layout1;
Ce que vous avez l'intention de faire est de récupérer une vue à partir d'une disposition déjà gonflée. Voilà comment vous le feriez:
int layoutID = getResources().getIdentifier("layout"+n, "id", getPackageName());
return (LinearLayout)findViewById(layoutID);
Voilà la version dynamique de
return (LinearLayout)findViewById(R.id.layout1);