2013-06-20 96 views
2
public class MainFragment extends Fragment { 
    public static final String TAG = MainFragment.class.getSimpleName(); 
    private static final String ABOUT_SCHEME = "settings"; 
    private static final String ABOUT_AUTHORITY = "main"; 
    public static final Uri ABOUT_URI = new Uri.Builder().scheme(ABOUT_SCHEME).authority(ABOUT_AUTHORITY).build(); 

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

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

     return v; 
    } 

} 

工作按照下面的鏈接: How to handle button clicks using the XML onClick within FragmentsonClickListener不片段

public class StartFragment extends Fragment implements OnClickListener{ 


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

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

     Button b = (Button) v.findViewById(R.id.StartButton); 
     b.setOnClickListener(this); 
     return v; 
    } 

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

       /* ... */ 

       break; 
     } 
    } 
} 

源沒有工作過。

+2

沒有理由爲什麼後半段代碼不應該工作,除非找不到可能會引發NullPointerException的按鈕。代碼的第一部分是無用的。 – JRomero

+1

J.Romero說的是完全正確的。代碼看起來應該完全一樣。你怎麼確定你的點擊監聽器沒有被觸發? – dymmeh

+0

另外可以發佈整個佈局(xml),可能會出現分層問題。 – JRomero

回答

-1

試試這個方法:

Button b = (Button) v.findViewById(R.id.StartButton); 
b.setOnClickListener(new OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         /*Your code*/ 
         } 
       }); 
4

@ J.Romero是正確的。試試這段代碼,我改變了onClick方法並添加了一些調試日誌。

public class StartFragment extends Fragment implements OnClickListener { 

    private static final LOG_TAG = "com.example.activity" 

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

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

     if (v != null) { 
      Button mButton = (Button) v.findViewById(R.id.StartButton); 
      Log.d(TAG, "View is not null"); 

      if (mButton != null) { 
       b.setOnClickListener(this); 
       Log.d(TAG, "mButton is not null"); 
      } 
     } 

     return v; 
    } 

    @Override 
    public void onClick(View v) { 
     if (v == mButton) { 
      //do something 
     } 
    } 
} 
2

你不能訪問UI元素onCreateView方法 - EVER

使用onActivityCreated方法,這就是告訴活性完全創建的片段,並準備進行互動

@Override 
     public void onActivityCreated(Bundle savedInstanceState) 
     { 
      // TODO Auto-generated method stub 
      super.onActivityCreated(savedInstanceState); 

      Button b = (Button) v.findViewById(R.id.StartButton); 
      b.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
            } 
          }); 
     } 
+0

這對我有用。謝謝Chaz。 – Axwack

+0

歡迎....快樂編碼:) – chazrmani

+1

實際上,您可以訪問onCreateView方法中的UI元素。我只是試了一下,然後我得到了EditText並在其上做了一個.setText(...),並且它完美地工作。然而,點擊事件不起作用。 – Ted

相關問題