2015-06-22 95 views
-2

我的片段中的點擊偵聽器無法正常工作。我沒有從我的requestData方法中得到我的logcat中的任何調試消息,也沒有我的onClick方法。我想這可能是因爲試圖使用片段中的活動方法,但我沒有看到這樣做的任何問題;它也不會影響我的onClick調試消息沒有顯示出來。片段onClick方法不起作用

活動:

public class MainActivity extends AppCompatActivity { 

    public void requestData(String first, String second) { 
     Log.d(「Success!」, first + 「 「 + second); 
    } 

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

片段:

public class WelcomeFragment extends Fragment implements View.OnClickListener{ 

    private Button mButton; 
    private EditText mFirstEditText; 
    private EditText mSecondEditText; 

    private View v; 

    public WelcomeFragment() { 
    } 

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

     v = inflater.inflate(R.layout.fragment_main, container, false); 
     return v; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 

     super.onActivityCreated(savedInstanceState); 
     mCalculateButton = (Button) v.findViewById(R.id.calculate_button); 
     mCalculateButton.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 

     mFirstEditText = (EditText) v.findViewById(R.id.first_editText); 
     String first = mFirstEditText.getText().toString(); 
     Log.d("Button clicked", "mFirstEditText set " + first); 

     mSecondEditText = (EditText) v.findViewById(R.id.second_editText); 
     String second = mSecondEditText.getText().toString(); 
     Log.d("Button clicked", "mSecondEditText set " + second); 

     v.requestData(first, second); 
    } 

} 

activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:orientation="horizontal"> 

    <fragment 
     android:id="@+id/welcome_fragment" 
     android:name="com.example.kent.AnApplication.WelcomeFragment" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1"/> 

</LinearLayout> 

welcome_fragment.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:paddingLeft="@dimen/activity_horizontal_margin" 
       android:paddingRight="@dimen/activity_horizontal_margin" 
       android:paddingTop="@dimen/activity_vertical_margin" 
       android:paddingBottom="@dimen/activity_vertical_margin" 
       tools:context=".MainActivityFragment"> 

    <TextView 
     android:text="@string/welcome " 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/welcome_textView" 
     android:textSize="20sp" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="68dp"/> 

    <EditText 
     android:layout_width="280dp" 
     android:layout_height="wrap_content" 
     android:inputType="text" 
     android:ems="10" 
     android:id="@+id/first_editText" 
     android:layout_marginTop="60dp" 
     android:layout_below="@+id/welcome_textView" 
     android:layout_centerHorizontal="true"/> 

    <EditText 
     android:layout_width="280dp" 
     android:layout_height="wrap_content" 
     android:inputType="text" 
     android:ems="10" 
     android:id="@+id/second_editText" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true"/> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New Button" 
     android:id="@+id/calculate_button" 
     android:layout_marginTop="43dp" 
     android:layout_below="@+id/second_editText" 
     android:layout_centerHorizontal="true"/> 

</RelativeLayout> 

回答

1

您沒有設置點擊偵聽器。嘗試下面的代碼:

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

     v = inflater.inflate(R.layout.fragment_main, container, false); 
     mButton = (Button) v.findViewById(R.id.your_button_id); 
     mButton.setOnClickListener(this); 
     return v; 
    } 

如果你有一些 「點擊」 事件,你必須使用if/else或您的onClick開關();方法。

+0

對我無效 –

+0

您可以發佈您的佈局代碼嗎? –

+0

發佈了佈局代碼 –

0

更改Fragment代碼如下:

public class WelcomeFragment extends Fragment implements View.OnClickListener{ 

    private Button mButton; 
    private EditText mFirstEditText; 
    private EditText mSecondEditText; 

    private View v; 

    public WelcomeFragment() { 
    } 

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

     v = inflater.inflate(R.layout.fragment_main, container, false); 
     return v; 
    } 

    @Override 
    public void onViewCreated (View view, Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 
     mCalculateButton = (Button) view.findViewById(R.id.calculate_button); 
     mCalculateButton.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick (View v) { 
       mFirstEditText = (EditText) v.findViewById(R.id.first_editText); 
       String first = mFirstEditText.getText().toString(); 
       Log.d("Button clicked", "mFirstEditText set " + first); 

      mSecondEditText = (EditText) v.findViewById(R.id.second_editText); 
      String second = mSecondEditText.getText().toString(); 
      Log.d("Button clicked", "mSecondEditText set " + second); 

      v.requestData(first, second); 
     } 
     }); 
    } 
} 
+0

它沒有傷心地工作。我沒有在logcat中獲得任何調試消息。 –

+0

將'onViewCreated'中的第二行更改爲'mCalculateButton =(Button)view.findViewById(R.id.calculate_button);'你可以嘗試一次,看看 –

+0

我收到「new OnClickListener」和onClick方法的編譯器錯誤。 –

0

的問題是在你的的onclick方法,你有沒有發現在其上發生的點擊那個按鈕的ID,改變你的onclick()方法代碼:

@Override 
public void onClick(View view) { 
    if(view.getId() == R.id.calculate_button) { 
    mFirstEditText = (EditText) v.findViewById(R.id.first_editText); 
    String first = mFirstEditText.getText().toString(); 
    Log.d("Button clicked", "mFirstEditText set " + first); 

    mSecondEditText = (EditText) v.findViewById(R.id.second_editText); 
    String second = mSecondEditText.getText().toString(); 
    Log.d("Button clicked", "mSecondEditText set " + second); 

    v.requestData(first, second); 
} 

}

我希望它會爲你工作

+0

嘿做一件事在片段onResume()mButton.setOnClickListener(this)註冊onClick()監聽器; –