简体   繁体   English

使用带有textview的片段的NullPointerException

[英]NullPointerException using fragments with textview

I'm getting a NullPointerException on tv.setMovementMethod(new ScrollingMovementMethod()); 我在tv.setMovementMethod(new ScrollingMovementMethod());上获得了NullPointerException tv.setMovementMethod(new ScrollingMovementMethod()); but i have absolutely no idea why! 但我完全不知道为什么! I have declared the textView in the XML file and initialized it inside onCreateView. 我在XML文件中声明了textView并在onCreateView中初始化了它。 Any help would be appreciated. 任何帮助,将不胜感激。

Here is the relevant section for the java code: 以下是java代码的相关部分:

public class TestConnection extends Fragment {
    public TestConnection() {

    }


    JSONParser jParser = new JSONParser();

    //button pressed to get the items
    Button getAllItems;

    //declare list view
    TextView tv;

    //Progress dialog
    private ProgressDialog pDialog;

    //Make an arrayList containing all items
    ArrayList<HashMap<String, String>> itemsList;

    //url to get items
    private static String urlAllItems = "http://jamesalfei.netne.net/php/get_all_items.php";

    //JSON node/tag names
    private static final String TAG_SUCCESS = "success";
    private static final String TAG_ITEMS = "items";
    private static final String TAG_PID = "pid";
    private static final String TAG_NAME = "name";

    //items array
    JSONArray items = null;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
            Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.sql_layout,
                container, false);
        getAllItems = (Button) getActivity().findViewById(R.id.SQLGetItems);

        //listview
        tv = (TextView) getActivity().findViewById(R.id.sqltv); 

        tv.setMovementMethod(new ScrollingMovementMethod());

        getAllItems.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // Launching All products Activity
                retreiveProducts();
            }
        });
        return view;
    }

and here is the xml 这是xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <Button
            android:id="@+id/SQLGetItems"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:text="@string/getSQL" />

        <TextView
            android:id="@+id/sqltv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/SQLGetItems"
            android:text="@string/sqlLabel" />

    </RelativeLayout>

Apologies if i have used any bad coding practices, but i'm VERY new to android programming! 如果我使用了任何不良编码实践,我会道歉,但我对Android编程非常新!

You are looking for your TextView in wrong view. 您正在错误的视图中查找TextView。 You should be searching inflated view, not parent's view, mostly because you are not added there in your onCreateView() . 您应该搜索膨胀的视图,而不是父视图,主要是因为您没有在onCreateView() So replace: 所以替换:

tv = (TextView) getActivity().findViewById(R.id.sqltv); 

with this 有了这个

tv = (TextView) view.findViewById(R.id.sqltv); 

The View isn't attached to anything because you use false as the third parameter in inflate() . 视图未附加到任何内容,因为您使用false作为inflate()的第三个参数。 So you need to scope findViewById() to the layout that has your TextView. 因此,您需要将findViewById()范围扩展到具有TextView的布局。 Use: 采用:

tv = (TextView) view.findViewById(R.id.sqltv); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM