2016-05-28 20 views
0

Hier ist mein Java-Code hinzufügen:nicht funktionieren kann "OnClickListener" zu Image

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); 

} 
} 

Hier ist meine XML-Code:

<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> 

Was ich versuche, ist, dass onClick der Image zu erreichen, Ich kann eine Datei auswählen und hinzufügen. Aber ich erhalte eine Fehlermeldung:

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

P. S mein Image in einer Navigationsleiste ist.

+0

Haben Sie versucht, Ihr Projekt zu säubern und neu aufzubauen? –

+1

Wenn Sie wirklich eine Bedingung ausführen wollen, dann sollte es wie if (v.getId() == R.id. imageButton_one) statt if (v == pfp) sein. – Krrishnaaaa

Antwort

2

Sie sollten entweder dies tun:

android:onClick="pfpClick" 

aber dann müssen Sie eine Methode in der Klasse mit dem Namen pfpClick, und ist nicht dazu da

oder diese

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

definieren beides zur gleichen Zeit ist eine schlechte Praxis und für die zweite Option ist dies nicht notwendig:

if (v == pfp){ 

weil der Hörer Sie implementieren ist anonym

Ich würde vorschlagen, das im Layout zu entfernen:

android:onClick="pfpClick" 

und dann reinigen/den Hörer Schnipsel ändern:

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

     } 
    }); 
0

Die Zeile pfp = (ImageButton) findViewById(R.id.imageButton_one); gibt ein Null-Objekt zurück.

Dies ist nur logisch, wenn etwas mit Ihrem XML falsch ist (Sie das richtige Layout nicht verwenden, oder die Ansicht id entspricht nicht dem in der XML)

Ein weiterer Fall könnte sein, dass Sie auf tun Build -> Clean Project und dann neu erstellen und führen Sie Ihre App.

Verwandte Themen