2016-05-28 6 views
0

に "OnClickListener" 機能を追加することはできません。ここでは、ここに私のJavaコードがあるのImageButton

public class MainPage extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { 

TabLayout tabLayout; 
ViewPageAdapter viewPageAdapter; 
ViewPager viewPager; 
ImageButton pfp; 
Bitmap bitmap_one; 

private String UPLOAD_URL = "http://.php"; 
private int PICK_IMAGE_REQUEST = 1; 
private String KEY_IMAGE = "image"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_page); 
    initTypeface(); 


    //id's 
    pfp = (ImageButton) findViewById(R.id.imageButton_one); 
    pfp.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (v == pfp){ 
       showFileChooser(); 
      } 
     } 
    }); 


    //SearchIntent 
    Intent searchI = getIntent(); 
    if (Intent.ACTION_SEARCH.equals(searchI.getAction())) { 

     String query = searchI.getStringExtra(SearchManager.QUERY); 
     Toast.makeText(MainPage.this, query, Toast.LENGTH_SHORT).show(); 
    } 

    //Toolbar 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setTitle(null); 

    //Tabs 
    tabLayout = (TabLayout) findViewById(R.id.tablayout_two); 
    viewPager = (ViewPager) findViewById(R.id.viewPager_two); 
    viewPageAdapter = new ViewPageAdapter(getSupportFragmentManager()); 
    viewPageAdapter.addFragments(new FeedFragment(), "Feed"); 
    viewPageAdapter.addFragments(new MessagesFragment(), "Messages"); 
    viewPageAdapter.addFragments(new NotificationsFragment(), "Notifications"); 
    viewPager.setAdapter(viewPageAdapter); 
    tabLayout.setupWithViewPager(viewPager); 


    //FloatingActionButton 
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
     } 
    }); 


    //NavigationDrawer 
    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); 
} 

@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 onNavigationItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    if (id == R.id.profile) { 

     Intent i = new Intent(this, Profile.class); 
     startActivity(i); 

    } else if (id == R.id.whatshot) { 

     Intent i = new Intent(this, WhatsHot.class); 
     startActivity(i); 

    } else if (id == R.id.trending) { 

     Intent i = new Intent(this, Trending.class); 
     startActivity(i); 

    } else if (id == R.id.radioplayer) { 

     Intent i = new Intent(this, Radio.class); 
     startActivity(i); 

    } else if (id == R.id.musicplayer) { 

     Intent i = new Intent(this, MusicPlayer.class); 
     startActivity(i); 

    } else if (id == R.id.settings) { 

     Intent i = new Intent(this, Settings.class); 
     startActivity(i); 

    } else if (id == R.id.info) { 

     Intent i = new Intent(this, Info.class); 
     startActivity(i); 

    } 

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

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.main_menu, menu); 

    SearchView searchView = (SearchView) menu.findItem(R.id.search_view).getActionView(); 
    SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

    return super.onCreateOptionsMenu(menu); 
} 


//ImageInfo 
private void showFileChooser() { 
    Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) { 
     Uri filePath = data.getData(); 
     try { 

      bitmap_one = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath); 
      pfp.setImageBitmap(bitmap_one); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 



//Typeface 
private void initTypeface() { 

    Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/Amble-Regular.ttf"); 
    TextView text = (TextView) findViewById(R.id.toolbarTitle); 
    text.setTypeface(myTypeface); 

} 
} 

は私のXMLコードです:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="@dimen/nav_header_height" 
android:background="@drawable/side_nav_bar" 
android:gravity="bottom" 
android:orientation="vertical" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:theme="@style/ThemeOverlay.AppCompat.Dark"> 

<ImageButton 
    android:id="@+id/imageButton_one" 
    android:layout_width="90dp" 
    android:background="#2A363B" 
    android:onClick="pfpClick" 
    android:layout_height="90dp" 
    android:paddingTop="@dimen/nav_header_vertical_spacing" /> 

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingTop="@dimen/nav_header_vertical_spacing" 
    android:text="" 
    android:textAppearance="@style/TextAppearance.AppCompat.Body1" /> 

<TextView 
    android:id="@+id/textView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="" /> 

</LinearLayout> 

私が達成しようとしています何を、のImageButtonのonClickのことです私はファイルを選択して追加することができます。しかし、私はエラーが発生し続ける:

Attempt to invoke virtual method 'void android.widget.ImageButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference

P.S私の画像ボタンはナビゲーションドロワーにあります。

+0

プロジェクトをクリーンアップして再構築しようとしましたか? –

+1

本当に条件を実行したい場合、if(v == pfp)ではなくif(v.getId()== R.id. imageButton_one)のようにする必要があります。 – Krrishnaaaa

答えて

2

あなたはこれを行う必要があり、次のいずれか

android:onClick="pfpClick" 

をしかし、あなたは名前pfpClickでクラスのメソッドを定義する必要があり、そしてそこ

またはこの

pfp.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (v == pfp){ 
       showFileChooser(); 
      } 
     } 
    }); 

ではありません両方とも同時に悪い習慣であり、第2のオプションのためには これは必要ではない:

if (v == pfp){ 

あなたが実装しているリスナーは、匿名

あるので、私は、レイアウトでこれを削除することをお勧め:

android:onClick="pfpClick" 

、その後、クリーン/リスナースニペットを変更します。

pfp.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      showFileChooser(); 

     } 
    }); 
0

pfp = (ImageButton) findViewById(R.id.imageButton_one);のように見えるのはnullオブジェクトを返します。

これはもう一つのケースは、あなたがする必要があるということであるかもしれない何かがあなたのXMLに問題がある場合には(あなたが正しいレイアウトを使用していない、またはビューidはXMLで1と一致していません)

だけ論理的ですBuild -> Clean Projectを実行してから、アプリケーションを再構築して実行してください。

関連する問題