空指针点addView [英] null pointer point addView

查看:260
本文介绍了空指针点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.

推荐答案

好吧,这个问题是布局文件被搞砸了,我有两个线性布局去horizo​​ntaly,因此层次结构难道不加载它们,给零点异常。只是任何人都希望在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆