2014-10-06 3 views
1

다른 스레드의 대부분을 살펴 봤지만 응용 프로그램이 충돌을 일으키는 원인을 파악할 수 없습니다. 내가 널 참조 객체에 가상 메서드 android.view.View에서 android.view.View.findViewById (int)를 호출하려고 시도 "점점 계속.이 오류는 라인 25조각에서 동적으로 생성 된 오브젝트를 어떻게 팽창 시키나요?

당신이보기를 부풀려 어떻게
"View ObjectView = inflater.inflate(R.layout.fragment_layout_biking,container,false); " 

에서 발생 안드로이드에서 새로 생성 된 개체에 대해? 감사합니다. 여기

public class Fragment1 extends Fragment { 

     @Override 
     public View onCreateView(LayoutInflater inflater, 
       @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
      // TODO Auto-generated method stub 
      View ObjectView = inflater.inflate(R.layout.fragment_layout_biking, container, false); 
      final EditText input1 = (EditText)getView().findViewById(R.id.input); 
      final ScrollView scroll = (ScrollView)getView().findViewById(R.id.scrolling); 
      Button addbox = (Button)getView().findViewById(R.id.CheckBoxAdd); 
      addbox.setOnClickListener(new OnClickListener(){ 

       @Override 
       public void onClick(View arg0) { 
        for (int box = 0; box <25; box++){ 
        CheckBox newcheckbox = (CheckBox)getView().findViewById(R.id.NewCheckBox); 
        newcheckbox.setText(input1.toString()); 
        scroll.addView(newcheckbox); 
        } 
       } 
      }); 



      return ObjectView; 
     } 
} 

는 사이클로 작업하기 전에,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/linearlayout" 
     android:orientation="vertical" > 
     <EditText 
     android:id="@+id/input" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
     </EditText> 
     <Button 
     android:id="@+id/CheckBoxAdd" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Add Checkbox" /> 
     <ScrollView 
     android:id="@+id/scrolling"  
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 
     <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/linearlayout2" 
     android:orientation="vertical"> 
     </LinearLayout> 

     </ScrollView> 

    </LinearLayout> 

답변

1

의 getView가 onCreateView에서 당신 팽창보기를 반환하는 XML이다 null를 돌려줍니다. 코드에는 두 가지 옵션이 있습니다. 첫 번째는 ObjectView.findViewById을 사용하여 필요한보기를 찾는 것입니다. 후자는 onViewCreated을 무시하고 onCreateView에 반환 한보기 인 첫 번째 매개 변수를 사용하여 필요한보기를 찾습니다.

0

원하는 결과를 생성하는 마지막 코드는 다음과 같습니다.

package fragments_for_app; 
import android.app.adventureprototype.R; 
import android.content.Context; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.text.Layout; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.EditText; 
import android.widget.LinearLayout; 
import android.widget.ScrollView; 
public class Fragment1 extends Fragment { 

    LinearLayout layout; 
    CheckBox newcheckbox; 
//18 
    @Override 
    public View onCreateView(LayoutInflater inflater, 
      @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 

     final View ObjectView = inflater.inflate(R.layout.fragment_layout_biking, container, false); 
     final EditText input1 = (EditText)ObjectView.findViewById(R.id.input); 
     layout = (LinearLayout)ObjectView.findViewById(R.id.linearlayout2); 
      //final ScrollView scroll = (ScrollView)ObjectView.findViewById(R.id.scrolling); 
     final Button addbox = (Button)ObjectView.findViewById(R.id.CheckBoxAdd); 
     layout.removeAllViews(); 
     addbox.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View arg0) { 


        newcheckbox = new CheckBox(ObjectView.getContext()); 
        newcheckbox.setText(input1.getText().toString()); 
        layout.addView(newcheckbox);  


        //work on this thursday 


       } 
     }); 

      return ObjectView; 
    } 

}