我正在尝试设置EditText的文本,但是我得到一个空指针异常。我已经看到其他帖子回答了这个问题,但是我正在扩展ActionBarActivity所以我不能简单地通过使用类似EditText f1 =(EditText) getActivity() .findViewById(R.id.field1)来解决这个问题。 );
public class SwitchURL extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_switch_url);
Intent intent = getIntent();
getActionBar().setDisplayHomeAsUpEnabled(true);
EditText f1 = (EditText) findViewById(R.id.field1);
EditText f2 = (EditText)findViewById(R.id.field2);
SharedPreferences pref1 = getSharedPreferences("textField1", 0);
SharedPreferences pref2 = getSharedPreferences("textField1", 0);
Log.v("", pref1.getString("textField1", "DNE"));
Log.v("", pref2.getString("textField2", "DNE"));
f1.setText("hello", TextView.BufferType.EDITABLE);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
我知道我收到了NullPointerException,因为我没有访问包含此editText的右视图。我有一个方法,当点击一个按钮时它被调用,它可以正常工作。
public void changeUrl(View v) {
EditText f1 = (EditText)findViewById(R.id.field1);
EditText f2 = (EditText)findViewById(R.id.field2);
SharedPreferences pref1 = getSharedPreferences("textField1", 0);
SharedPreferences pref2 = getSharedPreferences("textField1", 0);
SharedPreferences.Editor edit1 = pref1.edit();
SharedPreferences.Editor edit2 = pref2.edit();
edit1.putString("textField1", f1.getText().toString());
edit2.putString("textField2", f2.getText().toString());
edit1.commit();
edit2.commit();
Log.v("", pref1.getString("textField1", "Fail"));
Log.v("", pref2.getString("textField2", "Fail"));
}
知道如何访问此视图以便我可以设置editText的文本吗?这是xml:
<LinearLayout 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: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.android_native.SwitchURL$PlaceholderFragment"
android:background="@color/white"
android:orientation="vertical"
android:id="@+id/contain" >
<TextView
android:id="@+id/urlScreenTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Change URL"
android:textColor="@color/black"
android:textSize="30sp"
android:layout_gravity="center"/>
<EditText
android:id="@+id/field1"
android:layout_width="fill_parent"
android:layout_height="55dp"
android:text="http://stage1.onshift.com"
android:textColor="@color/black"
android:textSize="17sp"
android:background="@drawable/switch_url_fields_background"
android:inputType="text"
android:layout_gravity="center"
android:layout_marginTop="18dp"
android:paddingLeft="7dp"/>
<EditText
android:id="@+id/field2"
android:layout_width="fill_parent"
android:layout_height="55dp"
android:text="http://stage.v2.onshift.com"
android:textColor="@color/black"
android:textSize="17sp"
android:background="@drawable/switch_url_fields_background"
android:inputType="text"
android:layout_gravity="center"
android:layout_marginTop="9dp"
android:paddingLeft="7dp"/>
<Button
android:id="@+id/switchUrlButton"
android:layout_width="fill_parent"
android:layout_height="55dp"
android:text="Change URL"
android:textColor="@color/white"
android:textSize="22sp"
android:background="@drawable/switch_url_button"
android:inputType="text"
android:layout_gravity="center"
android:layout_marginTop="13dp"
android:gravity="center"
android:onClick="changeUrl"/>
</LinearLayout>
答案 0 :(得分:1)
如果EditText在Fragment中,那么当你的Activity创建时,还没有创建Fragment并且还没有让它的视图膨胀。目前使用findViewById()
尝试访问其任何观看次数将返回null
。
您访问片段视图的代码属于Fragment类本身的onCreateView
或onViewCreated
,而不属于Activity的onCreate
。您还应该将所有逻辑放在片段中,以便更好地模块化代码。
答案 1 :(得分:0)
这看起来就像是在尝试从活动中访问片段布局中定义的视图。活动在创建时不了解片段布局。将获取视图和管理其内容的代码移动到片段的onCreatView()中。