2016-07-17 59 views
1

我尝试了片段,并且出现OnClickListener问题。任何人都可以帮忙OnClickListener无法在片段上工作

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     frag_one frag1=new frag_one(); 
     FragmentManager manager=getSupportFragmentManager(); 
     FragmentTransaction transaction=manager.beginTransaction(); 
     transaction.add(R.id.top,frag1,""); 
     transaction.commit(); 
    } 
} 

frag_one.java

public class frag_one extends Fragment{ 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.activity_frag_one,container,false); 
    } 

    public class calculator extends AppCompatActivity implements View.OnClickListener { 
     TextView get_result; 
     EditText get_num1; 
     EditText get_num2; 
     Button get_button; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_frag_one); 
      get_result=(TextView)findViewById(R.id.result); 
      get_num1=(EditText) findViewById(R.id.num1); 
      get_num2=(EditText) findViewById(R.id.num2); 
      get_button=(Button)findViewById(R.id.submit); 
      get_button.setOnClickListener(this); 
     } 
     public void onClick(View v) { 
      int num1=Integer.parseInt((get_num1.getText().toString())); 
      int num2=Integer.parseInt((get_num2.getText().toString())); 
      int sum=num1+num2; 
      get_result.setText(Integer.toString(sum)); 
     } 
    } 
} 

当我不使用片段上的正常活动运行。当我点击按钮时,计算工作。但是当我转向片段时,它不起作用。请帮忙! THX

enter image description here

+1

我不明白为什么你试图创建新的类下的片段,有具体的方法片段 – Saveen

+0

@Sav een它不能在片段中被“公开”。感谢您指出这一点 –

+0

@ cricket_007如果你创建calculator.java。你如何链接到片段,使其工作? – gosulove

回答

1

你让使用该片段的布局,而不是实际放置逻辑到片段的第二个活动类....

public class frag_one extends Fragment implements View.OnClickListener { 

    TextView get_result; 
    EditText get_num1; 
    EditText get_num2; 
    Button get_button; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.activity_frag_one,container,false); 

     get_result=(TextView)rootView.findViewById(R.id.result); 
     get_num1=(EditText)rootView.findViewById(R.id.num1); 
     get_num2=(EditText) rootView.findViewById(R.id.num2); 
     get_button=(Button)rootView.findViewById(R.id.submit); 
     get_button.setOnClickListener(this); 

     return rootView; 
    } 

    public void onClick(View v) { 
     // TODO: Check v.getId() == R.id.submit 
     int num1=Integer.parseInt((get_num1.getText().toString())); 
     int num2=Integer.parseInt((get_num2.getText().toString())); 
     int sum=num1+num2; 
     get_result.setText(Integer.toString(sum)); 
    } 
} 
+0

thx兄弟!它现在工作:) – gosulove

0

你不是这里所指的任何观点,希望这将帮助你

public class ABC extends Fragment implements OnClickListener { 

View view; 
Context context; 

Button btnClick; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    view = inflater.inflate(R.layout.fragment, container, false); 

    return view; 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    context = activity; 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 

} 

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

    btnClick = (Button) view.findViewById(R.id.btnClick); 
    btnClick.setOnClickListener(this); 


} 

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.btnClick: 


     break; 
    default: 
     break; 
    } 

} 

} 
+0

你可以在'onCreateView'里面使用'findViewById' '...和开关(虽然正确)没有必要 –

+0

是的,我们可以但他的问题里面片段onclick不工作,所以我已经添加了简单的演示 – Saveen