2014-01-06 88 views
0

我有一個片段可以擴展自定義視圖。爲片段創建自定義onClickListner

目前在使用的用戶點擊它視圖更新視圖的

public boolean onTouchEvent(MotionEvent event) {... } 

不過,我也想更新的時候有一個MotionEvent該片段展示。不建議從自定義視圖像內做訪問FragmentManager

try{ 
    Activity a = (Activity) context; 
    FragmentManager fm = a.getFragmentManager(); 
    // Use the fragment manager 
} catch (ClassCastException e) { 
    Log.d(TAG, "Can't get the fragment manager with this"); 
} 

似乎凌亂和全坑瀑布。我可以看到,對於擴展ListFragment的片段,有一個public void onListItemClick(ListView l, View v, int position, long id)可以讓你創建一個回調函數,有沒有辦法讓它爲標準片段工作?

UPDATE:

對於那些有興趣,解決的辦法是把一個onClickListener的片段onCreateView類似:

  View canvasView = inflater.inflate(R.layout.canvas_view , container, false); 
      ComposeView myView = (ComposeView) canvasView.findViewById(R.id.myDrawView2); 
      myView.setOnClickListener(new OnClickListener() 
      { 
       @Override 
       public void onClick(View view) { 
        Log.d("FRAG", "OnClick Called"); 
        showNumericInput(); 
       } 
      }); 

      return canvasView; 

而且也產生在查看this.performClick();onTouchEvent一個clickEvent。因此,將調用視圖s onTouchEvent`,這將觸發後續的clickEvent,這將觸發片段中定義的處理程序。

+0

Invisible Button作爲片段的背景?您需要將基礎佈局設置爲RelativeLayout,並將其他小部件放置在不可見按鈕的頂部。 –

+0

在您的活動中實現自定義界面,並將界面的引用傳遞給需要它的活動。 – dm78

回答

0

嘗試在父活動或片段中處理此邏輯。作爲一般規則,片段不應該知道他們的父母。例如,您可以執行以下操作:

  1. 在佈局中有佈局的父級活動,並帶有片段。
  2. 在佈局上設置onClickListener,根據需要連接和分離碎片。

這樣,父級活動可以處理它在頂層所需的任何內容,而且這些片段永遠不需要知道。如果你需要做這個片段切換,但希望它在另一個片段內,你可以做同樣的事情。請注意,您必須以編程方式添加嵌套片段,因爲不支持xml嵌套片段。請參閱this for a fragment switching code example

+0

我試圖在片段中創建一個Listener接口並使活動實現此接口。但是,Listener無法觸發。我會在這裏玩的建議... – avrono

+0

我試圖讓活動和setOnClickListener的'onCreate'視圖到一個私人匿名onclicklistener,但這似乎並沒有被調用.... – avrono

+0

好吧,我解決了我需要從'onTouchEvent'調用'performClick'來觸發一個點擊事件(顯然是由'onTouchEvent'捕獲的) – avrono