2014-06-24 69 views
0

我是Android新手,我試圖做我的第一個應用程序。textview中的空指針

我讀過很多關於我得到的同樣問題的帖子,但無法弄清楚。

我希望你能幫助我。

我的應用程序有幾個活動。特別是在這種情況下,我發送了一個字符串,我想把它放在一個textview中。當我試圖做到這一點時,應用程序崩潰。所以,我閱讀了很多帖子並「捕捉」了空指針。但這意味着我的setContentView不起作用。

我正在使用ADT 2014-06-21下載。 試圖清理Eclipse,但它仍然是一樣的。 試圖更改tvGrupo的名稱(之前,它是textView1)。

此外,我不是很擅長英語,因爲你可以說,更重要的是,因爲我是Android新手,我並不習慣用於描述過程的所有單詞...... :( 所以,請非常具體

感謝所有幫助

這是我的代碼:!

public class DisplayGrup extends ActionBarActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_display_grup); 

    if (savedInstanceState == null) { 
     getSupportFragmentManager().beginTransaction() 
       .add(R.id.container, new PlaceholderFragment()).commit(); 
    } 

    TextView tvgrupo = (TextView) findViewById(R.id.tvGrupo); 
    if (tvgrupo == null) { 
// this is how i know i received a null pointer. 
     Toast.makeText(getApplicationContext(), "Puntero nulo", Toast.LENGTH_SHORT).show(); 

    } else { 
     tvgrupo.setText("hola"); 
     Toast.makeText(getApplicationContext(), "Obteniendo dato:" + tvgrupo.toString(), Toast.LENGTH_SHORT).show(); 
    } 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.display_grup, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 
    if (id == R.id.action_settings) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

/** 
* A placeholder fragment containing a simple view. 
*/ 
public static class PlaceholderFragment extends Fragment { 

    public PlaceholderFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_display_grup, 
       container, false); 
     return rootView; 
    } 
} 

public void clickBorrar(View view) { 
     // This works just fine. 
    TextView tv = (TextView) findViewById(R.id.tvGrupo); 
    tv.setText("hhhh"); 
} 
} 

這是我的xml:

<RelativeLayout 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" 
    android:gravity="top" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.mula_saltadora.DisplayGrup$PlaceholderFragment" > 

    <Button 
     android:id="@+id/button1" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:onClick="clickBorrar" 
     android:text="Borrar" /> 

    <TextView 
     android:id="@+id/tvGrupo" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/button1" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="10dp" 
     android:layout_toLeftOf="@+id/button1" 
     android:text="Grupo" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:ems="10" > 

     <requestFocus /> 
    </EditText> 

    <Button 
     android:id="@+id/button2" 
     style="?android:attr/buttonStyleSmall" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/editText1" 
     android:layout_alignParentRight="true" 
     android:text="Agregar" /> 

    <ListView 
     android:id="@+id/listView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/tvGrupo" 
     android:layout_below="@+id/tvGrupo" 
     android:layout_above="@+id/editText1" 
     > 
    </ListView> 


</RelativeLayout> 

回答

0

你的TextView是片段佈局,投入onCreateView你的代碼,而不是在的onCreate:

View rootView; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    rootView = inflater.inflate(R.layout.fragment_display_grup, 
      container, false); 

    TextView tvgrupo = (TextView) rootView.findViewById(R.id.tvGrupo); 
    if (tvgrupo == null) { 
     // this is how i know i received a null pointer. 
     Toast.makeText(getActivity(), "Puntero nulo", 
      Toast.LENGTH_SHORT).show(); 

    } else { 
     tvgrupo.setText("hola"); 
     Toast.makeText(getActivity(), "Obteniendo dato:" + 
      tvgrupo.toString(), Toast.LENGTH_SHORT).show(); 
    } 

    return rootView; 
} 

public void clickBorrar(View view) { 
    // This works just fine. 
    TextView tv = (TextView) rootView.findViewById(R.id.tvGrupo); 
    tv.setText("hhhh"); 
} 

編輯: 變化getApplicationContext()來getActivity(),並rootView全局變量的片段,並用它在函數clickBorrar也是如此。查看編輯的代碼。

+0

在findViewById上,我得到了:無法對類型爲Activity的非靜態方法findViewById(int)進行靜態引用。 在getApplicationContext上,我得到:無法對類型爲ContextWrapper的非靜態方法getApplicationContext()進行靜態引用。我應該如何解決此問題? – user3771164

+0

我編輯了我的代碼。請看看 – Zoran

+0

iei !!!!!非常感謝!!!!!! – user3771164

0

讓您的rootView可以訪問您的所有片段,並使用它調用findViewById。它是這樣的:

public static class PlaceholderFragment extends Fragment { 

    View rootView; 

    public PlaceholderFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     rootView = inflater.inflate(R.layout.fragment_display_grup, 
       container, false); 
     return rootView; 
    } 
} 

public void clickBorrar(View view) { 
     // This works just fine. 
    TextView tv = (TextView) rootView.findViewById(R.id.tvGrupo); 
    tv.setText("hhhh"); 
} 
} 
+0

格拉西亞斯佩德羅! Zoltan me dio una respuesta similar que ya mefuncionó。 – user3771164

0

在你的情況下,在你的活動不能有TextView的,所以你不能調用findViewById。所以你必須調用rootView導致Fragment。 e.g: 在活動findViewByID ....... 在片段rootView ......如果你使用的片段,你可以使用getView

或外部rootView()。

+0

謝謝@Dya!我解決了它 – user3771164