从setSelected()获取空指针异常

时间:2013-07-31 11:53:34

标签: java android android-fragments android-listfragment

我正在尝试在运行时在片段中实现marquee textview。

问题#1:我在第一个片段的tv.setSelected(true);处得到一个空指针异常。 一切正常,直到我把文本视图的选取框代码。

问题2:如何在public void onItemClick的列表视图中移动到新片段而不是新意图?

这是我的代码:

 public static class FragmentOne extends Fragment {

 ArrayList< String > ar;
 ArrayAdapter< String >  ad ;
 ListView lv ;
 TextView     tv;

public FragmentOne() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle        
         savedInstanceState) {
     View rootView = inflater.inflate(R.layout.one, container, false);
          tv = (TextView) rootView.findViewById(R.id.textView1);  

        tv.setSelected(true);
     ar = new ArrayList<String>(); 
     lv = (ListView) rootView.findViewById(R.id.listView1); 
     for (int i = 0 ; i< 10  ; i++){

        ar.add("My Item " + String.valueOf(i)); 

      }
      ad = new ArrayAdapter<String>
     (getActivity().getApplicationContext(), android.R.layout.simple_dropdown_item_1line, 
             ar);

     lv.setAdapter(ad);
     lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                          Toast t = Toast.makeText(getActivity(), "Message",
                                 Toast.LENGTH_SHORT);
                          t.show();

                        Intent i = new Intent(getActivity(), tst.class); 


                        startActivity(i); 

            }
        }); 


    return rootView;
}

}

这是xml代码:

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<TextView
    android:id="@+id/mywidget"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="94dp"
    android:layout_marginTop="145dp"
    android:ellipsize="marquee"
    android:fadingEdge="horizontal"
    android:lines="2"
    android:marqueeRepeatLimit="marquee_forever"
    android:scrollHorizontally="true"
    android:text="صور أندلسية ..... صفحة الأندلس ....معارك  أندلسية ..... الأندلس في سطور    
     ..... الأندلس :  "
    android:textColor="#ff4500"
    android:focusable="false" />

  </RelativeLayout>

3 个答案:

答案 0 :(得分:3)

  

空指针当您未初始化时,通常会发生异常   对象或初始化为null。

答案 1 :(得分:2)

在这里回答您的第一个问题 - 我强烈建议发布2个单独的问题。

如果NPE被抛出:

tv.setSelected(true);

(需要一个LogCat来确保)

...然后您的TextViewnull

反过来,这意味着rootView.findViewById(R.id.textView1);没有返回有效的TextView,可能是因为在R.layout.one xml中找不到具有此类ID(或该类型)的孩子。

确保您的R.layout.one xml包含标识为TextView的{​​{1}}节点。

修改

如果您发布的布局与textView1相对应,则非常简单:R.layout.one的ID为TextView

你需要改变它。

还要确保布局不会在其他地方使用,否则更改布局中的ID可能会出现问题。

您可能希望更改mywidget中的ID引用。

答案 2 :(得分:0)

之所以发生这种情况,是因为您的XML中没有任何ID为textView1的TextView。

修改

一旦您需要XML中具有ID listView1

的ListView,您也会遇到ListView问题