2016-05-25 83 views
1

还有就是XML布局java.lang.IllegalStateException:无法为Android execute方法:的onClick

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
 
    xmlns:tools="http://schemas.android.com/tools" 
 
    android:layout_width="match_parent" 
 
    android:layout_height="match_parent" 
 
    tools:context="com.example.lab02pc19.imhere.FragmentBluetooth"> 
 

 
    <!-- TODO: Update blank fragment layout --> 
 

 
    <RelativeLayout 
 
     android:layout_width="match_parent" 
 
     android:layout_height="match_parent" 
 
     android:layout_gravity="center_horizontal|top" 
 
     > 
 

 
     <ImageView 
 
      android:layout_width="wrap_content" 
 
      android:layout_height="wrap_content" 
 
      android:id="@+id/imageView2" 
 
      android:layout_alignParentTop="true" 
 
      android:layout_alignParentLeft="true" 
 
      android:layout_alignParentStart="true" 
 
      android:layout_marginLeft="44dp" 
 
      android:layout_marginStart="44dp" 
 
      android:layout_marginTop="70dp" 
 
      android:background="@drawable/ic_action_bluetooth_connected" 
 
      android:clickable="true" 
 
      android:onClick="miImagen" /> 
 
    </RelativeLayout> 
 
</FrameLayout>

我的工作与蓝牙工作的应用程序,我需要的是,应用打开并关闭手机的蓝牙点击ImageView。

这是错误

05-25 07:43:41.129 18314-18314/com.example.lab02pc19.imhere E/AndroidRuntime: FATAL EXCEPTION: main 
                       Process: com.example.lab02pc19.imhere, PID: 18314 
                       java.lang.IllegalStateException: Could not find method clickImagen(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatImageView with id 'imablue' 
                        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:325) 
                        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) 
                        at android.view.View.performClick(View.java:5201) 
                        at android.view.View$PerformClick.run(View.java:21163) 
                        at android.os.Handler.handleCallback(Handler.java:746) 
                        at android.os.Handler.dispatchMessage(Handler.java:95) 
                        at android.os.Looper.loop(Looper.java:148) 
                        at android.app.ActivityThread.main(ActivityThread.java:5443) 
                        at java.lang.reflect.Method.invoke(Native Method) 
                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

还有就是我的Java代码

package com.example.lab02pc19.imhere; 

import android.bluetooth.BluetoothAdapter; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.design.widget.NavigationView; 
import android.support.v4.app.Fragment; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.ImageView; 


public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener, FragmentOpciones.OnFragmentInteractionListener,FragmentBluetooth.OnFragmentInteractionListener { 
    ImageView miimagen; 
    BluetoothAdapter bluetoothAdapter; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     miimagen = (ImageView) findViewById(R.id.imablue); 
     View view = new View(this); 


     BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

     if(bluetoothAdapter==null){ 
      miimagen.setVisibility(View.GONE); 
     } 
     else 
     { 
      setEstadoBluetooth(bluetoothAdapter.isEnabled()); 

     } 


     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
    } 

    private void view(MainActivity mainActivity) { 
    } 

    private void setEstadoBluetooth(boolean enabled) { 
    } 

    private void setImageBluetooth(boolean enabled) { 
    } 
    public void clickima(View view){ 
     switch (view.getId()){ 
      case R.id.imablue: 
       setEstadoBluetooth(); 
       break; 

     } 
    } 

    public void setImagenBluetooth(Boolean valor){ 
     if(valor) miimagen.setImageResource(R.drawable.ic_action_bluetooth_connected); 
     else miimagen.setImageResource(R.drawable.ic_action_bluetooth); 
    } 
    public void setEstadoBluetooth(){ 
     if(bluetoothAdapter.isEnabled()){ 
      setImagenBluetooth(false); 
      bluetoothAdapter.disable(); 

     } 
     else{ 
      setImagenBluetooth(true); 
      bluetoothAdapter.enable(); 
     } 
    } 



    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 

     int id = item.getItemId(); 


     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 

     int id = item.getItemId(); 
     boolean FragmentTransaction = false; 
       Fragment fragment = null; 

     if (id == R.id.nav_opciones){ 
     fragment = new FragmentOpciones(); 
      FragmentTransaction = true; 

     }else if(id== R.id.nav_Bluetooth){ 
      fragment = new FragmentBluetooth(); 
      FragmentTransaction = true; 



     } 
     if(FragmentTransaction){ 
      getSupportFragmentManager().beginTransaction().replace(R.id.content_main, fragment).commit(); 
      item.setChecked(true); 
      getSupportActionBar().setTitle(item.getTitle()); 
     } 


     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 


    @Override 
    public void onFragmentInteraction(Uri uri) { 

    } 
} 
+1

发布您的XML布局以及。 –

+0

根据你的代码,感觉就像你在xml中提到onClick方法,并没有在java代码中声明相应的函数。 –

+0

有XML,请检查它。 –

回答

1

在XML文件中的ImageView你写android:onClick="miImagen"这意味着在单击该ImageView的方法命名as miImagen将被调用。

但是您还没有在您的java代码中编写任何miImagen()方法。所以你必须创建一个名为miImagen的方法,并在该方法内执行所需的功能。

而且在Java代码中你写:

miimagen = (ImageView) findViewById(R.id.imablue); 

但在你的XML存在具有ID为imablue没有这样的ImageView的。我认为在上面的代码行imablue它应该是imageView2这是您的XML文件中的imageView的ID。

+0

我认为这是我必须创建的方法:public void miImagen(View view){switch(view.getId()){ case R.id.imageView2: setEstadoBluetooth(); 休息; } } 但究竟在哪里? –

+0

您可以将它放置在MainActivity中的任何位置。并且不需要在方法内部放置开关盒,因为当用户在imageView2上点击时会自动调用,因为您已经在xml中定义了它。总之,您可以直接写下:'public void miImagen(){setEstadoBluetooth(); }' –

+0

如果有效,请接受答案。 –

相关问题