2016-10-16 12 views
0

私はonClickListenerに問題がありますか?OnClickはラジオボタン付きフラグメントでは機能しません

Error: 
10-16 04:30:50.489 921-921/adil.fragments E/AndroidRuntime: FATAL EXCEPTION: main 
                  java.lang.NullPointerException                 
at adil.fragments.Fragment1$1.onClick(Fragment1.java:56)                
at android.view.View.performClick(View.java:4084)                
at android.widget.CompoundButton.performClick(CompoundButton.java:100)                
at android.view.View$PerformClick.run(View.java:16966)                
at android.os.Handler.handleCallback(Handler.java:615)                
at android.os.Handler.dispatchMessage(Handler.java:92)                
at android.os.Looper.loop(Looper.java:137)                
at android.app.ActivityThread.main(ActivityThread.java:4745)                
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:786)                
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)                
at dalvik.system.NativeStart.main(Native Method) 

Fragment1.java;

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { 
    // inflate ... 
    View view = inflater.inflate(R.layout.fragment1, container, false); 
    return view; 
} 

public void onActivityCreated (Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 


    final Button radioButton = (Button) getActivity().findViewById(R.id.radioButton); 
    final Button button = (Button) getActivity().findViewById(R.id.button); 

    radioButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view){ 
      RadioButton radioButton = (RadioButton) getActivity().findViewById(R.id.radioButton); 
      if (radioButton.isChecked()) { 
        button.setText("asd"); 
      } 
     } 

    }); 
} 

@Override 
public void onClick(View v) { 

} 

Main_Activity.java;

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

    Fragment frag1 = new Fragment1(); 
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
    fragmentTransaction.add(R.id.frgmCont,frag1); 
    fragmentTransaction.commit(); 
} 
+0

問題は何ですか? – vlaz

答えて

1

変化

final Button radioButton = (Button) view.findViewById(R.id.radioButton); 
    final Button button = (Button) view.findViewById(R.id.button); 

radioButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view){ 

      if (radioButton.isChecked()) { 
        button.setText("asd"); 
      } 
     } 

変化がonCreateView(に上記のコードを移動)方法

0

PossiここBLY関連する質問:

Inside OnClickListener I cannot access a lot of things - how to approach?

は、ほとんどの場合、エラーはここから来た:

RadioButton radioButton = (RadioButton) getActivity().findViewById(R.id.radioButton); 

のonClick内部getActivityは()あなたはそれを返すように意図されているビューを返さない場合がありますので。ラジオボタンが配置されている変数のビューへのポインタを取得するか、onClick内で使用する前に、いくつかの変数にonClick()の前にgetActivity()の値を設定します。

1

このコードではonActivitycreatedコードをonCreateviewに移動する必要があると思います。

Fragment1.java 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.RadioButton; 
import android.widget.TextView; 


public class Fragment1 extends Fragment { 

RadioButton radioButton=null; 
TextView textView; 
public View onCreateView(LayoutInflater inflater,ViewGroup viewGroup,Bundle bundle){ 
    View view=inflater.inflate(R.layout.fragment1,viewGroup,false); 
    radioButton=(RadioButton)view.findViewById(R.id.radio); 
    textView=(TextView)view.findViewById(R.id.text); 
    radioButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      textView.setText("text changed"); 
     } 
    }); 
    return view; 
} 
} 

MainActivity.java

import android.support.v4.app.FragmentManager; 
    import android.support.v4.app.FragmentTransaction; 
    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 

    public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    FragmentTrasacation  fragmentTransaction=getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.add(R.id.frameid,new Fragment1()); 
    fragmentTransaction.commit(); 
} 
} 
関連する問題