web-dev-qa-db-ja.com

フラグメントはOnClickListenerを実装します

私が近代化しているアプリケーションがあります。このプロセスの1つのステップは、フラグメントベースのレイアウトへの変更です(サポートライブラリのフラグメントを使用)。アクティビティをフラグメントに変換し、レイアウトがうまく機能するようにしました(ViewPagerを使用して、かっこいいものを!)

すべてのボタンを押す必要がある場合に、アクティビティにOnClickListenerを実装させていました。もちろん、新しいフラグメントの化身が同じことをしていますが、「onClick」がヒットすることはないようです。フラグメントに関して、この方法で動作するのを妨げる特別なものはありますか?

16
Nick

こうやって

public class fragmentOne extends Fragment implements OnClickListener {
    Button myButton;

    @Override
    public View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedinstanceState) {
        View myView = inflater.inflate(R.layout.fragment_1, container, false);
        myButton = (Button) myView.findViewById(R.id.myButton);
        myButton.setOnClickListener(this);
        return myView;
    }

    @Override
    public void onClick(View v) {
        // implements your things
    }
}

とてもシンプル

40
Abhijit Chakra

グローバルアクセスにOnClickアクションを使用することに集中します。これはあなたのプロジェクトのようにする必要があります。View.OnClickListenerを実装し、次にメソッドOnClick()、InOnCreateView()はこのようにする必要がありますbutton_submit.setOnClickListener(this);必要なビューについては、Clear Answer、Thankyouの以下のコードを参照してください。

public class New_Project extends Fragment implements View.OnClickListener{

                private View mView;
                private EditText edttxt_projectname;
                private Button button_submit;

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

                    mView = inflater.inflate(R.layout.fragment_newproject, container,false);
                    edttxt_projectname=(EditText)mView.findViewById(R.id.edttxt_projectname);
                    button_submit=(Button)mView.findViewById(R.id.button_submit);

                    button_submit.setOnClickListener(this);

                    return mView;
                }


                @Override
                public void onClick(View v) {
                    switch (v.getId()) {
                    case R.id.button_submit:
                        edttxt_projectname.setText("Test Submit!#@%!#%");
                        break;
                default:
                        break;
                    }

                }
    }
10
MohanRaj S

Abhijit Chakraの回答についてコメントしたいのですが、そのためには50人の担当者が必要なようです。 Abhijitの答えを使用できないのではないかと考えている人にとって、それは次の理由によるものです。

public void OnClick(View v) {
    // implements your things
}

OnClickではなくonClickであることを確認する必要があります。ありがたいことにAndroid Studioの内部エラーメッセージが役に立ちました。

view.setOnLongClickListener(new View.OnLongClickListener() {
  @Override
  public boolean onLongClick(View v) {
    switch (v.getId()) {
      case R.id.imgView1:
        Toast.makeText(getActivity(), "Long pressing", Toast.LENGTH_SHORT).show();
        updateImage();
        break;
      case R.id.imgView2:
        Toast.makeText(getActivity(), "Long pressing", Toast.LENGTH_SHORT).show();
        updateImage();
        break;
      case R.id.imgView3:
        Toast.makeText(getActivity(), "Long pressing", Toast.LENGTH_SHORT).show();
        updateImage();
        break;
      default:
        break;
    }
1
lallu Sukendh