2011-02-06 7 views
7

हैलो, वर्ल्ड ग्रिडव्यू ट्यूटोरियल उदाहरण का उपयोग करके, मैं सरणी में छवि की स्थिति प्रदर्शित करने के बजाय छवि को पूर्णस्क्रीन पर क्लिक करने का प्रयास कर रहा हूं। जैसा कि मैं एंड्रॉइड के साथ असहनीय हूं और यह मेरा पहला विकास प्रयास है, मुझे नुकसान हुआ है। मैं जावा से परिचित हूँ, हालांकि, और मैं इस तरह बातें (जो स्पष्ट रूप से काम नहीं करते) कर की कोशिश की है:एंड्रॉइड ट्यूटोरियल ऐप पर छवि पूर्ण स्क्रीन बनाना

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    GridView gridview = (GridView) findViewById(R.id.gridview); 
    gridview.setAdapter(new ImageAdapter(this)); 

    gridview.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
      showImage(v, position); 
      Toast.makeText(HelloAndroid.this, "" + parent.getId(), Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

private void showImage(View view, int position) { 
    ImageView imgView = (ImageView) view; 
    imgView.setImageResource(position);  
} 

लेकिन ऐप्लिकेशन क्रैश (बलपूर्वक बंद करना)। कोई विचार?

Here is the tutorial app I am using

+0

आपको क्या सटीक त्रुटि मिलती है? लॉगकैट क्या कहता है? – John

+0

यह imgView.setImageResource पर एक शून्य सूचक फेंक रहा है। लॉगकैट के बारे में टिप के लिए धन्यवाद, मैं बस नियमित डीबगर का उपयोग कर रहा था। कम से कम अब मैं वर्बोज़ त्रुटियों को देख सकता हूं :) view.getId() -1 बीटीडब्ल्यू है। – Organiccat

उत्तर

23
imgView.setImageResource(position); 

इसका कारण यह है कि आप इसे सही ढंग से उपयोग नहीं कर रहे तो आपको एक त्रुटि देता है। पैरामीटर छवि की संसाधन आईडी (जो एक int है) को इंगित करना चाहिए उदा। R.id.imageid। भले ही आप सही संसाधन आईडी की आपूर्ति कर रहे हों, आप जो करना चाहते हैं वह काम नहीं करेगा।

सही संसाधन आईडी प्राप्त करने के लिए, आपको दृश्य के एडाप्टर को कॉल करने और सही संसाधन आईडी प्राप्त करने के लिए getItemId(position) विधि का उपयोग करने की आवश्यकता होगी। अपने ImageAdapter में, यदि आप getItemId() विधिको 0 के बजाय (Google के उदाहरण में) वापस करने के लिए बदलते हैं।

हालांकि, अपना परिणाम प्राप्त करने के लिए मैं आपको एक नई गतिविधि बनाने और बस उस तरह की छवि लोड करने का सुझाव दूंगा।

उदाहरण के लिए:

gridview.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
     long imageId = (ImageAdapter)parent.getAdapter.getItemAt(position); 

     Intent fullScreenIntent = new Intent(v.getContext(), FullScreenImage.class); 
     fullScreenIntent.putExtra(thisClassName.class.getName(), imageId); 

     thisClassName.this.startActivity(fullScreenIntent); 
    } 
}); 

आप एक full_image.xml लेआउट फ़ाइल बनाने, बस "fullImage" की एक आईडी के साथ एक imageView युक्त मानते हुए, अपने FullScreenImage वर्ग इस तरह दिखना चाहिए: इन के साथ

public class FullScreenImage extends Activity 
{ 
    protected void onCreate(Bundle savedInstanceState) { 
     setContentView(R.layout.full_image); 
     Intent intent = getIntent(); 
     long imageId = intent.getExtras().get(thisClassName.class.getName()); 
     ImageView imageView = (ImageView) v.findViewById(R.id.fullImage); 

     imageView.setLayoutParams(new ViewGroup.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT)); 

     imageView.setImageResource(imageId); 
     imageView.setScaleType(ImageView.ScaleType.FIT_XY); 
    } 
} 

कुछ कुछ tweaking के साथ लाइनों, आप के लिए अच्छी तरह से काम करना चाहिए। सुनिश्चित करें कि आप AndroidManifest.xml फ़ाइल में <activity> के रूप में भी पूर्णस्क्रीन छवि जोड़ें।

+0

कुछ संपादन की आवश्यकता है, लेकिन जब मैंने इसे शुरू किया तो मुझे इसकी जानकारी मिली। मुझे शायद एंड्रॉइड में थोड़ा आसान कूदने के साथ शुरू करना चाहिए: पी – Organiccat

+0

यह कोड क्लास कास्ट अपवाद – ekjyot

+0

लंबी छवि आईडी = (छवि एडाप्टर) parent.getAdapter.getItemAt (स्थिति) प्रदान कर रहा है; - यह लाइन मुझे टाइप मिस्चैच दिखाती है: मुख्य एक्टिविटी.इमेज एडाप्टर से लंबे समय तक परिवर्तित नहीं हो सकती है –

0

यहाँ, आप विचार है कि था की आईडी ले जा रहे हैं (view दिया गया तर्क) है और यह का उपयोग करके क्लिक खुद को फिर से देखने के लिए:

ImageView imgView = (ImageView) findViewById(view.getId()); 

कि बनाता है कोई मतलब नहीं, खासकर जब क्लिक किए गए दृश्य को स्पष्ट रूप से में कोई आईडी नहीं है, findViewByIdnull वापस करने के लिए।

आप शायद अपने ImageView बजाय आईडी पास करना चाहते हैं:

ImageView imgView = (ImageView) findViewById(R.id.whatever_the_id_of_the_image_view_is); 
+0

v मेरा इमेज व्यू है, हालांकि, मैंने डीबगर में दो बार चेक किया है और यह ठीक दिख रहा है, लेकिन इसमें कोई एमआईडी नहीं है (जो आईडी प्रतीत होता है, क्योंकि अगर मैं parent.getId() को आज़माता हूं तो यह दिखाता है। ImageView कोड के अंदर उत्पन्न गतिशील वस्तु है और यह ग्रिड व्यू का डेटा मेकअप है यदि यह किसी भी मदद करता है। – Organiccat

+0

मैं करीब आ रहा हूं, अब छवि खाली हो रही है और मुझे कोई त्रुटि नहीं मिल रही है। – Organiccat

+0

छवि दृश्य के बाद से ग्रिडव्यू के अंदर, क्या मुझे ग्रिडव्यू को बदलना है? – Organiccat

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