2016-08-03 4 views
-5

J'ai un fragment qui est la moitié de l'image et ensuite la moitié du texte.ImageView peut renvoyer Null?

Essayer d'affecter le ImageView et le TextView mais il dit:

POUVAIT null

et quand je lance l'application, il ne fonctionne pas.

J'ai inclus les fichiers Java et XML pour le fragment et inclu le mainActivity java.

Code Fragment:

import android.media.Image; 
import android.os.Bundle; 
import android.provider.ContactsContract; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.ViewGroup; 
import android.view.View; 
import android.widget.TextView; 
import android.widget.ImageView; 
import android.widget.TextView; 
import org.w3c.dom.Text; 
import android.view.View; 


    public class headercode extends Fragment implements Runnable{ 

     ImageView image; 
     TextView text; 


     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 

      if(getView().findViewById(R.id.imageView) != null) 
      { 

       image = (ImageView)getView().findViewById(R.id.imageView); 

      } 
      return inflater.inflate(R.layout.frag, container, false); 
     } 

     public void run(){ 

      text.setText("Test"); 

     } 
    } 

XML Mise en page:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#692f2f"> 
    <ImageView 
     android:layout_width="match_parent" 
     android:layout_height="300dp" /> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="269dp" 
     android:id="@+id/text"/> 
</LinearLayout> 

Code MainActivity:

import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.view.View; 
import android.support.design.widget.NavigationView; 
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.widget.TextView; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.app.FragmentManager; 
import android.widget.FrameLayout; 
import android.widget.Button; 



public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 




    Button button; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 



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

     if (findViewById(R.id.fragment) != null){ 

      headercode header = new headercode(); 
      getSupportFragmentManager().beginTransaction().add(R.id.fragment,header).commit(); 




     } 

    } 

    @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) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu);//This is the setting top right 
     return true; 
    } 


    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

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



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




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



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



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



     } 

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

} 
+3

Vous vous demandez une question en double. Et ce n'est pas lié à Android Studio (je modifierai volontiers votre message: P). S'il vous plaît toujours Google avant de poster une question, il permet d'économiser votre temps et le nôtre. http://stackoverflow.com/questions/10697915/why-custom-image-view-s-findviewbyid-returns-null – Sufian

+0

L'avertissement Lint est de dire que 'findViewById()' peut retourner un 'null'. Ceci est juste pour vous faire savoir qu'un nul devrait être prévu. Lisez à ce sujet ici - http://stackoverflow.com/questions/31936907/why-android-studio-has-this-nullable-thing. Mais votre problème est lu ceci - http://stackoverflow.com/questions/10697915/why-custom-image-view-s-findviewbyid-returns-null – Sufian

Répondre

1

Pour fragment, vous devez gonfler d'abord votre xml dans la méthode onCreateView, vous obtenez votre Voir et vous pouvez trouver votre ImageView correspondant:

View myView = inflater.inflate(R.layout.frag, container, false); 

ImageView myImage = (ImageView) myView.findViewById(R.layout.my_image); 

return myView; 

Dans le xml, vous devez ajouter un identifiant à l'iamgeView pour obtenir:

<ImageView 
     android:id="@+id/my_image" 
     android:layout_width="match_parent" 
     android:layout_height="300dp" /> 
+3

Correct, il n'a pas non plus donné un 'id' à son imageview au dessus. – Shaishav

0

Essayer d'affecter le ImageView et le textView mais il dit POUVAIT erreur nulle et quand Je cours l'application, il ne fonctionne pas.

Ceci est un avertissement de lintette vous informant que findViewById peut renvoyer une valeur nulle. Si votre xml contient le id que vous recherchez, vous n'avez rien à craindre.

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     if(getView().findViewById(R.id.imageView) != null) 

getView() renvoie les View les onCreateView retours, vous ne pouvez donc pas utiliser getView() l'intérieur onCreateView. Remplacer onViewCreate à la place, et son paramètre View pour effectuer vos appels findViewById

0

Dans le fragment, vous devez d'abord infalte la vue et assing valeurs à son contenu

Exemple:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

View rootView = inflater.inflate(R.layout.frag, container, false); 
ImageView image = (ImageView) rootView.findViewById(R.id.imageView); 
TextView tv = (TextView) rootView.findViewById(R.id.yourTextViewId); 
tv.setText("Test"); 

// Here you will perform all the actions that you want to perform and then in the end return the view like below 

return rootView; 
}