2013-06-10 12 views
13

से फ्रैगमेंट का दृश्य प्राप्त करें मेरे पास FragmentActivity है जहां मैं Fragment जोड़ता हूं। कुछ स्थितियों के आधार पर, मैं उस खंड के लेआउट से Buttons तक पहुंच बनाना चाहता हूं और उनमें से श्रोताओं को क्लिक करना चाहता हूं।फ्रैगमेंट एक्टिविटी

मैं क्या है:

View view = myFragment.getView(); 
Button myButton = (Button) view.findViewById(R.id.my_button); 
myButton.setOnClickListener(new MyClickListener()); 

लेकिन view वैरिएबल हमेशा null है।

मैं गतिविधि का दृश्य कैसे प्राप्त कर सकता हूं?

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 

public class DetailFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.details, container, false); 
     return view; 
    } 


    public void setSettings(){ 
     Button button = (Button) getView().findViewById(R.id.my_button); 
     button.setOnClickListener(new MyClickListener()); 
    } 
} 
+1

क्या मेराफ्रेम जोड़ा गया है और दृश्यमान है? –

+1

ध्यान दें कि आप अपनी गतिविधि के दृश्य पदानुक्रम पर 'findViewById()' को कॉल कर रहे हैं, न कि 'view''। – laalto

+0

जब आप करते हैं: 'बटन myButton = (बटन) findViewById (R.id.my_button);', आप अपने वर्तमान दृश्य के लिए बटन ढूंढने का प्रयास करें जो आपका 'खंड दृश्य' नहीं है। इसलिए यह उम्मीद के रूप में काम नहीं कर रहा है। –

उत्तर

21

आप अपने घटक का उपयोग और कुछ डेटा सेट करना चाहते हैं, मैं तुम्हें इस तरह टुकड़ा अंदर एक विधि बनाने के लिए सुझाव है

public class YourFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      return inflater.inflate(R.layout.your_fragment, null); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     View view = getView(); 
     if(view != null) { 
      view.findViewById(R.id.my_button).setOnClickListener(new MyClickListener()); 
     } 
    } 
} 

इस कोड काम करता है चाहिए ठीक। मुझे उम्मीद है, यह आपकी मदद करेगा।

+0

getView() पर क्रेट() में शून्य हो सकता है और यह कई मामलों में ऐसा करता है। अगर मैं गतिविधि की ऑनक्रेट विधि से सेट सेटिंग्स को कॉल करता हूं तो अपवाद फेंक दिया जाएगा –

2

टुकड़े में ऑनक्लिक लिस्टेनर्स सेट करने के लिए, अपने खंड वर्ग में onViewCreated ओवरराइड करें।

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 
    view.findViewById(R.id.yourId).setOnClickListener(this); 
    //or 
    getActivity().findViewById(R.id.yourId).setOnClickListener(this); 
} 

मैं स्वचालित रूप से एक टुकड़ा में वेब दृश्य को फिर से लोड करने के लिए एक timertask स्थापित करने के लिए कोशिश कर रहा था और इस विधि केवल बात यह है कि मेरे लिए काम किया था। मेरी परियोजना पर है।

स्रोत: this answer

1

जब आप एक वर्ग है कि Fragment फैली यह onViewCreated() विधि के अंदर यह करने के लिए बेहतर है अंदर अपने बटन को प्रारंभ। यह गारंटी देगा कि दृश्य पहले से मौजूद है।

1

गतिविधि में अपने टुकड़े का डेटा प्राप्त करने के लिए बस getRootView() विधि का उपयोग करें।

//below block of code write in activity. 

EditText et = (EditText) v.getRootView().findViewById(R.id.name); 
Log.d("Name", et.getText().toString()); 

नाम खंड का क्षेत्र है।

संबंधित मुद्दे