2012-12-06 17 views
16

में एक विधि (दृश्य) नहीं मिला, मैं कुछ छवियों के साथ ग्रिडव्यू का उपयोग कर रहा हूं, मैं एक मेनू दिखाना चाहता हूं जब उपयोगकर्ता ग्रिडव्यू में एक छवि पर टैप करता है, और फिर दिखाए गए मेनू से करने के लिए एक क्रिया का चयन करें।java.lang.illegalstateexception गतिविधि प्रोग्राम में एंड्रॉइड खंड

package Kazemi.Alireza.scada; 
import android.annotation.SuppressLint; 
import android.app.Dialog; 
import android.app.FragmentManager; 
import android.content.Context; 
import android.graphics.Typeface; 
import android.graphics.drawable.AnimationDrawable; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.ContextMenu; 
import android.view.ContextMenu.ContextMenuInfo; 
import android.view.Gravity; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.WindowManager; 
import android.view.ViewGroup.LayoutParams; 
import android.widget.AdapterView; 
import android.widget.AdapterView.AdapterContextMenuInfo; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.PopupWindow; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 


@SuppressLint("NewApi") 
public class CitiesTab extends Fragment { 

AnimationDrawable[] frameAnimation; 
ImageAdapter ia; 
GridView gridView; 
int in; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return (LinearLayout)inflater.inflate(R.layout.citytab, container, false); 
} 

public void onStart() 
{ 
    super.onStart(); 
    ia = new ImageAdapter(getActivity()); 
    gridView = (GridView) getActivity().findViewById(R.id.gridview); 
    gridView.setAdapter(ia); 
    gridView.post(new Starter()); 
    gridView.setOnItemClickListener(new OnItemClickListener() 
    { 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
     { 
      dialog = new Dialog(getActivity(), android.R.style.Theme_InputMethod); 
      dialog.setContentView(R.layout.pump_menu); 
     }}); 
    /*Button btn = (Button) getActivity().findViewById(R.id.Button_pumpInfo); 
    btn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Toast.makeText(getActivity(), "You clicked on Item 1", 
        Toast.LENGTH_LONG).show(); 
     } 
    });*/ 
} 

public void Btn_pumpInfo_Clicked(View v) { 
    // TODO Auto-generated method stub 
    Toast.makeText(getActivity(), "You clicked on Item 1", 
      Toast.LENGTH_LONG).show(); 
} 

}

यहाँ मेरी pump_menu.xml कोड है::

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#a5c5f0" 
    android:orientation="vertical" > 

<Button 
    android:id="@+id/Button_pumpInfo" 
    android:layout_height="40dp" 
    android:text="@string/menu_pumpinfo_item1" 
    android:textSize="11sp" 
    android:layout_width="125dp" 
    android:background="#a5c5f0" 
    android:onClick="Btn_pumpInfo_Clicked"/> 

और citytab.xml:

यहाँ मेरी कोड है

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

<GridView 
    android:id="@+id/gridview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:numColumns="auto_fit" 
    android:verticalSpacing="10dp" 
    android:horizontalSpacing="10dp" 
    android:columnWidth="90dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center" /> 

<ImageView 
    android:id="@+id/gifViewer" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:scaleType="center"/> 

</LinearLayout> 

जब मैं इस कोड का प्रयोग करें, एक त्रुटि हुई:

java.lang.RuntimeException: Unable to start activity ComponentInfo{Kazemi.Alireza.scada/Kazemi.Alireza.scada.MainMenu}: java.lang.NullPointerException 

और जब मैं टिप्पणी Btn_pumpInfo_Clicked() विधि, और (onStart में बटन श्रोता uncommented) निम्नलिखित त्रुटि उत्पन्न हुई है:

java.lang.IllegalStateException: Could not find a method Btn_pumpInfo_Clicked(View) in the activity class android.view.ContextThemeWrapper for onClick handler on view class android.widget.Button with id 'Button_pumpInfo' 

जहां समस्या है? धन्यवाद

+0

आप बल्कि सिर्फ एक लाइन से पूरे स्टैक ट्रेस पोस्ट करना चाहिए और अपने कोड – nandeesh

उत्तर

39

आप Button के लिए onClick कॉलबैक (का प्रयोग करके) (Dialog के लेआउट से) Fragment कक्षा में पंजीकृत नहीं कर सकता है क्योंकि Android यह के रूप में यह खोज करेंगे केवलActivity के लिए नहीं मिलेगा उस नाम से मेल खाने वाली विधि (Btn_pumpInfo_Clicked) और यह उस अपवाद को फेंक देगा। इसके बजाय Dialog में Button के लिए देखने के लिए और यह एक सामान्य श्रोता आवंटित:

//... 
dialog.setContentView(R.layout.pump_menu) 
Button b = (Button) dialog.findViewById(R.id.Button_pumpInfo); 
b.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onCLick(View v) { 
     // profit 
    } 
}); 

या विधि के लिए कदम: Activity कक्षा में

public void Btn_pumpInfo_Clicked(View v) { 
    // TODO Auto-generated method stub 
    Toast.makeText(getActivity(), "You clicked on Item 1", 
      Toast.LENGTH_LONG).show(); 
} 

अगर यह आपको फिट बैठता है।

+1

में लाइन नंबर का कहना है @ user1793700 तो मेरा उत्तर आप इसे के रूप में सही (जाँच चिह्न के साथ) को चिह्नित कर सकता है मदद की तो सवाल होगा उत्तर बनो। मुझे नहीं पता कि आप किस दो विकल्पों का उपयोग करते हैं, यदि आप 'संवाद' वर्ग का उपयोग करने जा रहे हैं तो आप बेहतर संवाद 'संवाद' का विस्तार करते हैं और उस वर्ग में सामग्री दृश्य सेट करते हैं और श्रोताओं को सेट करते हैं। – Luksprog

+0

मुझे नहीं पता कि मैं सही के रूप में कैसे चिह्नित कर सकता हूं! क्या आप मुझे समझा सकते हैं कि यह कैसे करें? मैंने अपने मामले में पहला विकल्प इस्तेमाल किया, और यह मेरे लिए काम करता है :) आपकी टिप्पणी के लिए धन्यवाद :) – user1793700

+0

मैं अपने कोड में अपने स्वयं के संवाद का उपयोग करता हूं, क्या यह सच नहीं है? – user1793700

3

इस बग Android 2.x पर केवल हो रहा Android के लिए अपनी गतिविधि वर्ग पदानुक्रम जाँच रहा है, तो 4 विशिष्ट वर्ग के सदस्यों:

public class HomeActivity extends Activity { 

    private android.app.ActionBar.LayoutParams customTitleParams; 

    .... 
} 

वर्ग android.app.ActionBar.LayoutParams Android 2.x और इस कर सकते हैं पर उपलब्ध नहीं है समस्या का कारण बनता है।

+0

मुझे यह वही समस्या है, और मुझे लगता है कि आपने इसे सिर पर मारा होगा। मैंने सोचा कि मैं जिंजरब्रेड पर अपने ऐप का परीक्षण कर सकता हूं, लेकिन, मेरा ऑनक्लिक (व्यू वी) कक्षा android.support.v7.widget.AppCompatImageButton पर क्रैश हो रहा है, इसे नहीं मिला। –

0

यह तब भी हो सकता है जब ऑनक्लिक ऑफ व्यू (बटन) पर कॉल करने की विधि उपलब्ध नहीं है या संबंधित गतिविधि में उपलब्ध नहीं है। कदम जाँच करने के लिए:

  • चेक विधि नाम मूल्य में एंड्रॉयड के लिए: onclick विशेषता से मेल खाता है विधि वास्तव में लिखा है।
  • विधि का एक्सेस संशोधक सार्वजनिक है ताकि निष्पादित हो सके।
संबंधित मुद्दे