空指针点addView [英] null pointer point addView
问题描述
我试着去一个TextView添加到线性布局progmmatically,但我一直让我的线性布局的空指针。布局充气后其被称为,所以我不明白为什么它的发生。继承人的code。
Im trying to add a textview to a linear layout progmmatically, but I keep getting a null pointer on my linear layout. Its being called after the layout is inflated, so I do not understand why its happening. Heres the code.
tile_layout.xml
tile_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/master"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/fragment_two_directory"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Testing Fragment Two" />
</LinearLayout>
fragment_two.java
fragment_two.java
public class fragment_two extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.tile_layout,container, false);
}
public static fragment_two newInstance(String directory, Activity activity) {
fragment_two ft = new fragment_two();
TextView text = (TextView)activity.findViewById(R.id.fragment_two_directory);
text.setText(directory);
return ft;
}
public static void setDirectoryText(String directory, Activity activity) {
TextView directoryText = (TextView)activity.findViewById(R.id.fragment_two_directory);
directoryText.setText(directory);
populateDirectory(directory, activity);
}
public static void populateDirectory(String directory, Activity activity) {
LinearLayout masterLinear = (LinearLayout)activity.findViewById(R.id.master);
TextView testText = new TextView(activity);
testText.setText("test");
masterLinear.addView(testText);
//testText.setText("Testing Add View");
//for (int x=0; x < 5; x++) {
//FrameLayout container = new FrameLayout(getActivity());
//container.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
//ImageView fileImage = new ImageView(getActivity());
//fileImage.setLayoutParams(new FrameLayout.LayoutParams(110, 110));
//fileImage.setImageResource(R.drawable.blank_file);
//container.addView(fileImage);
//TextView fileName = new TextView(getActivity());
//fileName.setLayoutParams(new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
//fileName.setText("Filename.txt");
//container.addView(fileName);
//masterLinear.addView(container);
//}
}
}
最后是这里的主要活动
And finally here is the main activity
package com.bv.dual_fragments;
import com.bv.dual_fragments.fragment_one.OnArticleSelectedListener;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.widget.TextView;
public class dual_fragments extends Activity implements OnArticleSelectedListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
//((global_holder)this.getApplication()).setDirectory("test");
}
@Override
public void onArticleSelected(String directory) {
//fragment_two frag_two = (fragment_two)getFragmentManager().findFragmentById(R.id.container);
//TextView containerText = (TextView)findViewById(R.id.fragment_two_directory);
//containerText.setText(directory);
fragment_two.populateDirectory(directory, this);
}
}
继承人的LogCat中
Heres the LogCat
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): FATAL EXCEPTION: main
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): java.lang.NullPointerException
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at com.bv.dual_fragments.fragment_two.populateDirectory(fragment_two.java:36)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at com.bv.dual_fragments.dual_fragments.onArticleSelected(dual_fragments.java:25)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at com.bv.dual_fragments.fragment_one.onListItemClick(fragment_one.java:88)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.app.ListFragment$2.onItemClick(ListFragment.java:160)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.widget.AdapterView.performItemClick(AdapterView.java:282)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.widget.AbsListView.performItemClick(AbsListView.java:1032)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2447)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.widget.AbsListView.onTouchEvent(AbsListView.java:3077)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.widget.ListView.onTouchEvent(ListView.java:3566)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.view.View.dispatchTouchEvent(View.java:4600)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1488)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1256)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1494)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1269)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1494)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1269)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1494)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1269)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1494)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1269)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1494)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1269)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1494)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1269)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1700)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1270)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.app.Activity.dispatchTouchEvent(Activity.java:2271)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1680)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2272)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.view.ViewRoot.handleMessage(ViewRoot.java:1958)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.os.Handler.dispatchMessage(Handler.java:99)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.os.Looper.loop(Looper.java:126)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at android.app.ActivityThread.main(ActivityThread.java:3997)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at java.lang.reflect.Method.invokeNative(Native Method)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at java.lang.reflect.Method.invoke(Method.java:491)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
03-06 17:35:47.452: ERROR/AndroidRuntime(3576): at dalvik.system.NativeStart.main(Native Method)
我也是在蜂窝模拟器跑这,看了看观众层次结构。我有两个的LinearLayout的layoutfile内,既不它们都显示出来,只有TextView的。
I also ran this in the honeycomb emulator, and looked at the heirarchy viewer. I have two linearlayout inside of that layoutfile, and neither of them are showing up, only the textview.
推荐答案
好吧,这个问题是布局文件被搞砸了,我有两个线性布局去horizontaly,因此层次结构难道不加载它们,给零点异常。只是任何人都希望在heirarchyviewer为Android 3.0的小费,片段(该layoutfile内),将自动在其放大视图的第一个布局标签的所有权。所以说,你有
Ok, the problem was the layout file was messed up and I had two linear layouts going horizontaly, and therefore the heirarchy wouldnt load them, giving the null point exception. Just a tip for anyone looking at the heirarchyviewer for Android 3.0, the fragment (inside the layoutfile) will automatically take ownership of the first layout tag in its inflated view. So say you have
<fragment android:id="@+id/viewer" />
和在你的布局文件必须
<LinearLayout android:id="@+id/first_layout" />
在层次结构观众,所述的LinearLayout将显示为观看者,而不是first_layout,因为不必须默认布局的片段,其将重新编号的第一个布局容器在其layoutfile到其自身的ID。
In heirarchy viewer, the LinearLayout will appear as viewer, not first_layout, since the fragment doesnt have a default layout, its going to re-id the first layout container in its layoutfile to its own id.
这篇关于空指针点addView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!