2017-05-06 36 views
-2

試圖讓我的按鈕全部3片段使用相同的單擊事件後Click事件,public class FragmentShapesDemo extends android.support.v4.app.Fragment implements View.OnClickListener變成紅色下劃線&返回錯誤:在片段多個按鍵不靈

Class 'FragmentShapesDemo' must either be declared abstract or implement abstract method 'onClick(View)' in OnClickListener

我不不懂爲什麼這個錯誤出現時,點擊事件已實施: -/

fragment_shapes_demo.xml

<Button 
    android:id="@+id/btn_1" 
    android:onClick="btn_Click" 
    android:text="@string/circles"/> 

<Button 
    android:id="@+id/btn_2" 
    android:onClick="btn_Click" 
    android:text="@string/squares"/> 

<Button 
    android:id="@+id/btn_3" 
    android:onClick="btn_Click" 
    android:text="@string/triangles"/> 

FragmentShapesDemo.java

public class FragmentShapesDemo extends android.support.v4.app.Fragment { 

    Button button0; 
    Button button1; 
    Button button2; 

    public FragmentShapesDemo() { 
     // Required empty constructor 
    } 

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

     View v = inflater.inflate(R.layout.fragment_shapes_demo, container, false); 

     button0 = (Button) v.findViewById(R.id.btn_1); 
     button1 = (Button) v.findViewById(R.id.btn_2); 
     button2 = (Button) v.findViewById(R.id.btn_3); 

     button0.setOnClickListener(this); 
     button1.setOnClickListener(this); 
     button2.setOnClickListener(this); 

     return v; 
    } 

    public void btn_Click(View v) { 
     Toast.makeText(getActivity(), "Hello World", Toast.LENGTH_LONG).show();  
    } 
} 
+0

findViewById(),而你是在你的情況 – Gautam

回答

0

從XML刪除onClick

<Button 
    android:id="@+id/btn_1" 

    android:text="@string/circles"/> 

<Button 
    android:id="@+id/btn_2" 
    android:text="@string/squares"/> 

<Button 
    android:id="@+id/btn_3" 
    android:text="@string/triangles"/> 

使用您的rootView參考找到要點的意見。你爲什麼要使用getActivity()

public class FragmentShapesDemo extends android.support.v4.app.Fragment { 

    Button button0; 
    Button button1; 
    Button button2; 

    public FragmentShapesDemo() { 
     // Required empty constructor 
    } 

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

     View v = inflater.inflate(R.layout.fragment_shapes_demo, container, false); 

     button0 = (Button)v.findViewById(R.id.btn_1); 
     button1 = (Button)v.findViewById(R.id.btn_2); 
     button2 = (Button)v.findViewById(R.id.btn_3); 

     button0.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) { 
        Toast.makeText(getActivity, "Do Your Work", Toast.LENGTH_SHORT).show(); 
       } 
      }); 

     button1.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) { 

       } 
      }); 

     button2.setOnClickListener(new OnClickListener() { 
       public void onClick(View v) { 

       } 
      }); 

     return v; 
    } 
} 
+0

膨脹不同的視圖,即V I要使用所有相同的單擊事件:您也可以用下面的代碼實現按鈕onClick了。我的按鈕,因此這個答案是沒有效率的。我怎樣才能做到這一點,而不必鍵入代碼3次? – MacaronLover

+0

有一些我們需要遵循的代碼結構,因爲您想要爲所有按鈕實現它,您如何定義哪個按鈕被點擊,您也可以選擇第一個答案。但據我所知,如果沒有正確的id初始化,沒有辦法確保這個功能。 –

+0

是否可以將所有3個點擊事件合併爲一個?例如。 'button0 | button1 | button2.setOnClickListener' – MacaronLover