2012-09-05 3 views
0

맹목적인 문제는 용서해주세요. 그러나 내 앱이 무슨 문제로 인해 (이번에는) 충돌하는지 알 수 없습니다. XML 레이아웃 파일을 확장 가능한 목록보기로 확장하려고합니다. 여기 Expandable adapter 어댑터가 계속 충돌 함 Activity

package com.anthonyce.mcathomie; 

import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.ExpandableListView; 
import android.widget.TextView; 

public class PlayoptionsActivity extends Activity { 

ExpandableListView Mtopics; 
ExpandableAdapter MtopicsAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_playoptions); 
    //set up adapter 
    MtopicsAdapter = new ExpandableAdapter(); 
    Mtopics = (ExpandableListView) findViewById(R.id.mtopicsListView); 
    Mtopics.setAdapter(MtopicsAdapter); 
    //Mtopics.setGroupIndicator(null); 
} 

public class ExpandableAdapter extends BaseExpandableListAdapter { 
    private Context context; 
    private String[] groups = { "People Names", "Dog Names", "Cat Names", 
      "Fish Names" }; 
    private String[][] children = { { "Arnold" }, { "Ace" }, { "Fluffy" }, 
      { "Goldy" } }; 

    public Object getChild(int groupPosition, int childPosition) { 
      return children[groupPosition][childPosition]; 
    } 

    public long getChildId(int groupPosition, int childPosition) { 
      return childPosition; 
    } 

    public View getChildView(int groupPosition, int childPosition, 
      boolean isLastChild, View convertView, ViewGroup parent) { 
     View childView; 
     LayoutInflater childInflate = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     childView = childInflate.inflate(R.layout.mtopics_childrow, parent, false); 

     TextView childtxt = (TextView)childView.findViewById(R.id.mtopicchildtext); 
     childtxt.setText(getChild(groupPosition, childPosition).toString()); 

     return childView; 

    } 

    public int getChildrenCount(int groupPosition) { 
     return children[groupPosition].length; 
    } 

    public Object getGroup(int groupPosition) { 
     return groups[groupPosition]; 
    } 

    public int getGroupCount() { 
     return groups.length; 
    } 

    public long getGroupId(int groupPosition) { 
     return groupPosition; 
    } 

    public View getGroupView(int groupPosition, boolean isExpanded, 
      View convertView, ViewGroup parent) { 
     View groupView; 
     groupView = new View(context); 
     LayoutInflater groupInflate = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     groupView = groupInflate.inflate(R.layout.mtopics_grouprow, parent, false); 

     TextView grouptxt = (TextView)groupView.findViewById(R.id.mtopicgrouptext); 
     grouptxt.setText(getGroup(groupPosition).toString()); 

     return groupView; 
    } 

    public boolean hasStableIds() { 
     return true; 
    } 

    public boolean isChildSelectable(int groupPosition, int childPosition) { 
     return true; 
    } 
} 
} 

그리고

내가 그것을 작동되기 전에

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mtopicgrouplin" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="fill"> 

    <TextView 
     android:gravity="left" 
     android:id="@+id/mtopicgrouptext" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:ems="10" 
     android:textStyle="bold" /> 



    <CheckBox 
     android:id="@+id/checkBoxgroup" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

팽창하기 위해 노력하고있어 그룹 레이아웃의 XML하지만 텍스트가 그냥 충돌이 코드를 지금 보여주는 하였다. 나는 당신은 context에 값을 설정하지 해독

09-05 17:09:33.919: E/AndroidRuntime(429): FATAL EXCEPTION: main 
09-05 17:09:33.919: E/AndroidRuntime(429): java.lang.NullPointerException 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.view.ViewConfiguration.get(ViewConfiguration.java:228) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.view.View.<init>(View.java:1878) 
09-05 17:09:33.919: E/AndroidRuntime(429): at com.anthonyce.mcathomie.PlayoptionsActivity$ExpandableAdapter.getGroupView(PlayoptionsActivity.java:118) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.widget.ExpandableListConnector.getView(ExpandableListConnector.java:445) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.widget.AbsListView.obtainView(AbsListView.java:1430) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.widget.ListView.measureHeightOfChildren(ListView.java:1216) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.widget.ListView.onMeasure(ListView.java:1127) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.view.View.measure(View.java:8313) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.widget.LinearLayout.measureVertical(LinearLayout.java:386) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.view.View.measure(View.java:8313) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.view.View.measure(View.java:8313) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.widget.LinearLayout.measureVertical(LinearLayout.java:531) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.view.View.measure(View.java:8313) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.view.View.measure(View.java:8313) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.view.ViewRoot.performTraversals(ViewRoot.java:839) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.os.Looper.loop(Looper.java:123) 
09-05 17:09:33.919: E/AndroidRuntime(429): at android.app.ActivityThread.main(ActivityThread.java:3683) 
09-05 17:09:33.919: E/AndroidRuntime(429): at java.lang.reflect.Method.invokeNative(Native Method) 
09-05 17:09:33.919: E/AndroidRuntime(429): at java.lang.reflect.Method.invoke(Method.java:507) 
09-05 17:09:33.919: E/AndroidRuntime(429): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
09-05 17:09:33.919: E/AndroidRuntime(429): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
09-05 17:09:33.919: E/AndroidRuntime(429): at dalvik.system.NativeStart.main(Native Method) 

답변

1

을 찾는거야 그 문제는 childrow에있을 것입니다 생각하지만, 여기

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mtopicchildlin" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="fill"> 

    <CheckBox 
     android:paddingLeft="10dp" 
     android:id="@+id/checkBoxchild" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"/> 

    <TextView 
     android:id="@+id/mtopicchildtext" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     /> 
</LinearLayout> 

간다 그리고 여기에 로그 캣하지 않습니다 변수이므로 groupView = new View(context)을 수행하면 컨텍스트가 null이고 NullPointerException을 던집니다.

ExpandableAdapter(Context context) 
{ 
    this.context = context; 
} 
+0

다른 행에'context'을 사용했기 때문일 것입니다. 생성자를 사용하면 크래시가 발생하지 않습니다. – Dalmas

+0

무슨 지적! 나는 몇 시간 동안 꼼짝 않고 바라 보았다. 불행히도이 문제를 바로 잡는 것은 아무 것도하지 않았습니다. 나는 심지어 선을 제거하려고 노력했다. 그리고 그것은 아직도 충돌한다. 내 레이아웃 인플레이 터 컨텍스트도 정의해야합니까? (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); – mango

+0

예,이 행에서도 예외가 발생합니다. – Dalmas

1

groupView = new View(context); 

를 제거하고 프로그램을 실행 : 또한 생성자를 만들 수 있습니다

groupView = new View(PlayoptionsActivity.this); 

:

대신 현재 활동 컨텍스트를 사용합니다.