0

애플리케이션에서 단편에 listview를 삽입하면 아이템으로 채워진 후 목록 뷰가 표시되지 않습니다. 사실 NullPointerException으로 인해 응용 프로그램이 충돌합니다. 아무도 나를 도울 수 있습니까? 다음은 내가 조각을 보여주는 세부 활동입니다.ListView가 단편에 표시되지 않습니다.

package com.example.sample; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.app.NavUtils; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 

import com.actionbarsherlock.app.ActionBar; 
import com.actionbarsherlock.app.ActionBar.Tab; 
import com.actionbarsherlock.app.SherlockFragmentActivity; 
import com.actionbarsherlock.view.MenuItem; 

/** 
* An activity representing a single Course detail screen. This activity is only 
* used on handset devices. On tablet-size devices, item details are presented 
* side-by-side with a list of items in a {@link CourseListActivity}. 
* <p> 
* This activity is mostly just a 'shell' activity containing nothing more than 
* a {@link CourseDetailFragment}. 
*/ 
public class CourseDetailActivity extends SherlockFragmentActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_course_detail); 

    // Show the Up button in the action bar. 
    ActionBar actionBar = getSupportActionBar(); 
    actionBar.setDisplayHomeAsUpEnabled(true); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    // initiating both tabs and set text to it. 
    ActionBar.Tab assignTab = actionBar.newTab().setText("Assignments"); 
    ActionBar.Tab schedTab = actionBar.newTab().setText("Schedule"); 
    ActionBar.Tab contactTab = actionBar.newTab().setText("Contact"); 

    // Create three fragments to display content 
    Fragment assignFragment = new Assignments(); 
    Fragment schedFragment = new Schedule(); 
    Fragment contactFragment = new Contact(); 

    assignTab.setTabListener(new MyTabsListener(assignFragment)); 
    schedTab.setTabListener(new MyTabsListener(schedFragment)); 
    contactTab.setTabListener(new MyTabsListener(contactFragment)); 

    actionBar.addTab(assignTab); 
    actionBar.addTab(schedTab); 
    actionBar.addTab(contactTab); 

    ListView listView = (ListView) findViewById(R.id.assignlist); 
    String[] values = new String[] { "Android", "iPhone", "WindowsMobile", 
     "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", 
     "Linux", "OS/2" }; 

    // First paramenter - Context 
    // Second parameter - Layout for the row 
    // Third parameter - ID of the TextView to which the data is written 
    // Forth - the Array of data 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
     android.R.layout.simple_list_item_1, android.R.id.text1, values); 

    // Assign adapter to ListView 
    listView.setAdapter(adapter); 

} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     // This ID represents the Home or Up button. In the case of this 
     // activity, the Up button is shown. Use NavUtils to allow users 
     // to navigate up one level in the application structure. For 
     // more details, see the Navigation pattern on Android Design: 
     // 
     // http://developer.android.com/design/patterns/navigation.html#up-vs-back 
     // 
     NavUtils.navigateUpTo(this, new Intent(this, 
       CourseListActivity.class)); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

class MyTabsListener implements ActionBar.TabListener { 
    public Fragment fragment; 
    public Fragment fragment2; 

    public MyTabsListener(Fragment fragment) { 
     this.fragment = fragment; 
    } 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     ft.replace(R.id.main_across, fragment); 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     ft.remove(fragment); 
    } 
} 
} 

현재 작업을 시작하려고하는 조각을 과제 조각이라고합니다. CourseDetailActvity에서 볼 수 있듯이 listview에있는 간단한 항목을 채워서 listview가 표시되는지 확인합니다. 프래그먼트가 제대로 팽창되지만 목록 뷰에 항목을 추가하려고하면 응용 프로그램이 충돌합니다!

다음은 logcat입니다.

11-17 11:54:28.037: E/AndroidRuntime(282): FATAL EXCEPTION: main 
11-17 11:54:28.037: E/AndroidRuntime(282): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sample/com.example.sample.CourseDetailActivity}: java.lang.NullPointerException 
11-17 11:54:28.037: E/AndroidRuntime(282): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
11-17 11:54:28.037: E/AndroidRuntime(282): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
11-17 11:54:28.037: E/AndroidRuntime(282): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
11-17 11:54:28.037: E/AndroidRuntime(282): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
11-17 11:54:28.037: E/AndroidRuntime(282): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-17 11:54:28.037: E/AndroidRuntime(282): at android.os.Looper.loop(Looper.java:123) 
11-17 11:54:28.037: E/AndroidRuntime(282): at android.app.ActivityThread.main(ActivityThread.java:4627) 
11-17 11:54:28.037: E/AndroidRuntime(282): at java.lang.reflect.Method.invokeNative(Native Method) 
11-17 11:54:28.037: E/AndroidRuntime(282): at java.lang.reflect.Method.invoke(Method.java:521) 
11-17 11:54:28.037: E/AndroidRuntime(282): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
11-17 11:54:28.037: E/AndroidRuntime(282): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
11-17 11:54:28.037: E/AndroidRuntime(282): at dalvik.system.NativeStart.main(Native Method) 
11-17 11:54:28.037: E/AndroidRuntime(282): Caused by: java.lang.NullPointerException 
11-17 11:54:28.037: E/AndroidRuntime(282): at com.example.sample.CourseDetailActivity.onCreate(CourseDetailActivity.java:66) 
11-17 11:54:28.037: E/AndroidRuntime(282): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-17 11:54:28.037: E/AndroidRuntime(282): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
11-17 11:54:28.037: E/AndroidRuntime(282): ... 11 more 
+0

코드의 어느 라인이 '라인 66'입니까? 이것은 NPE의 위치이므로이 정보를 추가하는 것이 좋습니다. – Veger

답변

0

나는 당신의 충돌이 라인에 생각 :

listView.setAdapter(adapter); 

adapter 분명히, 그래서 listView은 null이어야합니다 (충돌 어쨌든 setAdapter() 내에없는) 널 (null)이 아닙니다.

ListView listView = (ListView) findViewById(R.id.assignlist); 

글쎄, 우리는 거기에서 선언 된 것을 볼 수 있습니다. 그러나 객체가 발견되지 않으면 findViewById()은 null을 반환 할 수 있습니다. 사용중인 레이아웃 (activity_course_detail.xml)에 ID가 assignlist 인 객체 (특히 ListView)가없는 것으로 보입니다.

+0

assignlist가 조각에 대한 다른 레이아웃 파일에 있습니다. 이 XML 파일도 어떻게 팽창 시키나요? – aindurti

+0

"너무"? "대신"을 의미하지 않는다고 확신합니까? 그것을 포함 시키려면 (LayoutInflater를 사용하여) 그것을 팽창시켜 기존 뷰의 일부로 삽입해야합니다. 좋은 예가 있습니다 : http://stackoverflow.com/a/5027921/1438733 – Eric

+0

그러나 assignlist를 포함하는 레이아웃 파일은 조각화되어 있습니다. 내가 if..else를 만들면 사용해야하는 단편을 기반으로 XML이 팽창 된 블록이 변경됩니다. – aindurti

관련 문제