2016-10-16 56 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布萊相關的問題在這裏:

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

最有可能從這裏傳來的錯誤:

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

因爲getActivity()內的onClick可能不會返回您打算它返回的視圖。在放置單選按鈕所在的變量中獲取指向視圖的指針,或者在onClick中使用onClick()之前,將某個變量的getActivity()值放入某個變量中。

1

我想你應該把你的onActivity創建的代碼移動到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(); 
} 
}