2012-10-31 106 views
2

在我的活動中,我想在頂部顯示一些文本視圖,然後在它下面充氣一個listview。我嘗試過各種方法沒有成功,比如addview(),但無法讓它工作。我膨脹的觀點成爲主要佈局。Android:如何將充氣佈局和非充氣佈局結合起來?

任何幫助將不勝感激。基於泰德霍普溶液 logcat的錯誤

2月10日至20日:38:38.322:d/AndroidRuntime(1253):關閉VM 2月10日至20日:38:38.322:W/dalvikvm(1253):主題ID = 3:螺紋帶未捕獲的異常退出(組= 0x4001b188) 2月10日至20日:38:38.322:E/AndroidRuntime(1253):未捕獲的處理程序:線程退出主要由於未捕獲的異常 2月10日至20日:38:38.342:電子/ AndroidRuntime(1253):java.lang.RuntimeException:無法啓動活動ComponentInfo {com.example.mycoursetimetable/com.example.mycoursetimetable.MyCourses}:java.lang.IllegalStateException:無法將標題視圖添加到列表中 - setAdapter已經被稱爲。 2月10日至20日:38:38.342:E/AndroidRuntime(1253):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 2月10日至20日:38:38.342:E/AndroidRuntime(1253):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 二月10日至20日:38:38.342:E/AndroidRuntime(1253):在android.app.ActivityThread.access $ 2200(ActivityThread.java:119) -10- 20 02:38:38.342:E/AndroidRuntime(1253):at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1863) 10-20 02:38:38.342:E/AndroidRuntime(1253):at android .os.Handler.dispatchMessage(Handler.java:99) 2月10日至20日:38:38.342:E/AndroidRuntime(1253):在android.os.Looper.loop(Looper.java:123) 2月10日至20日:38:38.342:E/AndroidRuntime(1253):在android.app.ActivityThread.main(ActivityThread.java:4363) 2月10日至20日:38:38.342:E/AndroidRuntime(1253):在java.lang.reflect.Method.invokeNative(本機方法) 2月10日至20日:38:38.342:E/AndroidRuntime(1253):在java的.lang.reflect.Method.invoke(Method.java:521) 2月10日至20日:38:38.342:E/AndroidRuntime(1253):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java :860) 2月10日至20日:38:38.342:E/AndroidRuntime(1253):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 2月10日至20日:38:38.342:電子/ AndroidRuntime(1253):在dalvik.system.NativeStart.main(本機方法) 2月10日至20日:38:38.342:E/AndroidRuntime(1253):java.lang.IllegalStateException:致無法添加報頭以列出 - setAdapter已被調用。 二月10日至20日:38:38.342:E/AndroidRuntime(1253):在android.widget.ListView.addHeaderView(ListView.java:256) 二月10日至20日:38:38.342:E/AndroidRuntime(1253):在android.widget.ListView.addHeaderView(ListView.java:279) 10-20 02:38:38.342:E/AndroidRuntime(1253):at com.example.mycoursetimetable.MyCourses.onCreate(MyCourses.java:30) 10 -20 02:38:38.342:E/AndroidRuntime(1253):在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 2月10日至20日:38:38.342:E/AndroidRuntime(1253):在機器人。 app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 2月10日至二十○日:38:38.342:E/AndroidRuntime(1253):... 11多個 2月10日至二十○日:38:38.382:I/dalvikvm(1253) :threadid = 7:對信號做出反應3 10-20 02:38:38.382:E/dalvikvm(1253):Unabl e打開堆棧跟蹤文件'/data/anr/traces.txt':權限被拒絕 10-20 02:38:47.463:I/Process(1253):發送信號。PID:1253 SIG:9

activity_my_courses

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:id="@+id/main" > 

    <Button 
     android:id="@+id/labelAddCourseButton" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:onClick="addCourseButton" 
     android:padding="10dp" 
     android:text="@string/CourseName" /> 

</LinearLayout> 

listcourses

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/listLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" > 



    <TextView 
     android:id="@+id/labelModuleCode" 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content" 
     android:layout_marginLeft="10dp" 
     android:text="@string/CourseName" 
     android:textSize="10dp" /> 

    <TextView 
     android:id="@+id/labelCourseType" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/CourseType" 
     android:layout_marginLeft="10dp" 
     android:textSize="10dp" /> 
</LinearLayout> 

代碼

public class MyCourses extends ListActivity { 

    static final String TEST = "com.example.mycoursetimetable.TEST"; 
    String [] MODULE; 

     @Override 
     public void onCreate(Bundle savedInstanceState) 
     { 
     super.onCreate(savedInstanceState); 

     LinearLayout main = (LinearLayout)this.findViewById(R.id.main); 
     MODULE = getResources().getStringArray(R.array.module); 
     setListAdapter(new ListArrayAdapter(this,MODULE)); 
     } 



     public void addCourseButton (View addCourseButton) 
     { 
     Intent intent = new Intent(this,AddCourse.class); 
     startActivity(intent); 
     } 

     protected void onListItemClick(ListView l, View v, int position, long id) 
     { 
      super.onListItemClick(l, v, position, id); 


     try { 
      Class test = Class.forName("com.example.MyCourseTimeTable.AddCourse"); 
      Intent intent = new Intent(MyCourses.this, test); 

      TextView textView = (TextView) v.findViewById(R.id.labelModuleCode); 
      String module = textView.getText().toString(); 


      intent.putExtra(TEST,module); 
      startActivity(intent); 
      } 
       catch (ClassNotFoundException e) 
       { 
       e.printStackTrace(); 
       } 

     } 

} 

class ListArrayAdapter extends ArrayAdapter<String> 
{ 
    // You only need one copy of LayoutInflater 
    private final LayoutInflater inflater; 

    //create the ArrayAdpater 
    public ListArrayAdapter(Context context, String[] test) 
    { 
     super(context, R.layout.activity_my_courses, test); 
     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     ViewHolder holder; 
     if(convertView == null) { 


      // Inflate the layout that you want for each row 


      convertView = inflater.inflate(R.layout.listcourses, parent, false); 

      holder = new ViewHolder(); 
      holder.code = (TextView) convertView.findViewById(R.id.labelModuleCode); 
      holder.type = (TextView) convertView.findViewById(R.id.labelCourseType); 

      // Add a link for your button as well and define its OnClickListener here to, eventually... 

      convertView.setTag(holder); 
     } 
     else 
      holder = (ViewHolder) convertView.getTag(); 

     String module = getItem(position); 
     //set the text to the string values based on position 
     holder.code.setText(module); 

     //return the layout 
     return convertView; 
    } 

    class ViewHolder { 
     TextView code; 
     TextView type; 
    } 
} 
+0

在的onCreate的開始()方法,你不調用的setContentView()method..so難怪你找不到你的主要的LinearLayout –

+0

目前尚不清楚你想要做什麼。你沒有使用你在'onCreate'中分配的'main'變量。另外,佈局'activity_my_courses'不能像'ListActivity'的佈局那樣使用。它需要有一個'ListView'屬性爲'android:id =「@ android:id/list」'。 –

回答

3

而不是試圖定義自己的活動佈局,你可以使用這樣的事情:

public class MyCourses extends ListActivity { 

    static final String TEST = "com.example.mycoursetimetable.TEST"; 
    String [] MODULE; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 

     MODULE = getResources().getStringArray(R.array.module); 
     getListView().addHeaderView(getHeader()); // must come before next line 
     setListAdapter(new ListArrayAdapter(this,MODULE)); 
    } 

    private View getHeader() { 
     LayoutInflater inflater = 
      (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE); 
     return inflater.inflate(R.layout.listcourses, null); 
    } 
    . . . 
} 

,這將使layout/listcourses.xml對列表中的頭文件中定義的視圖。

+0

嗨特德,我累了類似這樣的方法,但是當我運行仿真器中的活動我得到顯示應用程序中的錯誤意外停止。 – Calgar99

+0

@ user1544223 - 錯誤的logcat輸出是什麼? –

+0

我添加了Logcat輸出到我的主帖。 – Calgar99

0

我想你需要有下面你在XML文件中的android ID textviews一個<ListView/>應該是默認android:id\list其次你需要做setContentView(YOUR LAYOUT FILE)onCreate()