2013-06-20 11 views
15

मेरे पास एक सवाल है, हर कोई।लेआउट प्राप्त करने के लिए getResource.getIdentifier() का उपयोग कैसे करें?

मैं XML (लेआउट/xxx.xml) में अपना लेआउट तत्व प्राप्त करने के लिए getResource.getIdentifier() का उपयोग करना चाहता हूं।

लेकिन मुझे सामना करना पड़ रहा है "संसाधन आईडी # 0x7f070003 प्रकार # 0x12 मान्य नहीं है ..." त्रुटि संदेश।

मुझे नहीं पता कि इस समस्या को कैसे ठीक किया जाए।

मैं एक विधि वापसी लाइनरलेआउट का उपयोग कर रहा हूं।

यह नीचे मेरी कोड है:

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

मेरे लेआउट कई LinearLayout है, लेकिन नाम के समान है (layout1, layout2, layout3 ...)।

मैं कॉल विधि का उपयोग नियुक्ति तत्व प्राप्त करना चाहता हूं।

मेरी लेआउट कोड के नीचे है:

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

लेकिन जावा कोड त्रुटि लौटाएगा।

त्रुटि संदेश के नीचे है:

 : 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 

किसी को भी इस समस्या को पता है? इस समस्या को कैसे हल करें?

उत्तर

34
इस के साथ

:

int layoutID = getResources().getIdentifier("layout"+n, "layout", getPackageName()); 

आप मूल रूप से एक लेआउट फ़ाइल है कि आप बढ़ सकता है की आईडी प्राप्त करें। यह

int layoutID = R.layout.layout1; 

का गतिशील संस्करण है जो आप करना चाहते हैं वह पहले से ही फुले हुए लेआउट से एक दृश्य पुनर्प्राप्त कर रहा है। यही कारण है कि तुम कैसे करते करेंगे:

int layoutID = getResources().getIdentifier("layout"+n, "id", getPackageName()); 
return (LinearLayout)findViewById(layoutID); 

return (LinearLayout)findViewById(R.id.layout1); 
के गतिशील संस्करण है कि
संबंधित मुद्दे

 संबंधित मुद्दे