我尝试在 fragment 中使用 AutoCompleteTextView 但我在 autoCompleteTextViewCountry.setAdapter(adapter);
处遇到异常我使用示例代码,但此示例是在标准 Activity 中使用它而不是 fragment ,所以我认为问题出在这里:
我的代码: ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.iMainActivity,
android.R.layout.simple_dropdown_item_1line, COUNTRIES);
原始示例代码: ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, COUNTRIES);
全类:
public class SettingsActivity extends Activity {
public static SettingsActivity iSettingsActivity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
}
public SettingsActivity(){
iSettingsActivity=this;
}
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_settings, container, false);
String COUNTRIES[]={"INDIA","ITALY","JAPAN","USA","ICELAND","INDONESIA","UK","IRAN","IRAQ"};
final AutoCompleteTextView autoCompleteTextViewCountry = (AutoCompleteTextView)rootView.findViewById(R.id.autoCompleteTextView1);
final TextView textViewSelectedCountry=(TextView)rootView.findViewById(R.id.textViewCountry);
Button btnSelectedCountry=(Button)rootView.findViewById(R.id.buttonSelectCountry);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.iMainActivity,
android.R.layout.simple_dropdown_item_1line, COUNTRIES);
autoCompleteTextViewCountry.setAdapter(adapter);
autoCompleteTextViewCountry.setThreshold(1);
btnSelectedCountry.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
String country=autoCompleteTextViewCountry.getText().toString();
textViewSelectedCountry.setText("Selected Country: "+country);
}
});
return rootView;
}
}
}
完整的 xml:
<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".SettingsActivity$PlaceholderFragment"
android:background="@color/myBlack"
>
<TextView
android:id="@+id/textViewCountry"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="You Selected :"
android:textColor="@color/white"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_below="@+id/autoCompleteTextView"
android:layout_alignParentLeft="true" />
<AutoCompleteTextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:layout_below="@+id/autoCompleteTextView1"
android:layout_marginTop="20dp"
android:layout_alignParentLeft="true"
android:ems="10"
android:hint="Choose The Country"
android:id="@+id/autoCompleteTextView">
<requestFocus />
</AutoCompleteTextView>
<Button
android:id="@+id/buttonSelectCountry"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text=" OK "`enter code here`
android:layout_below="@+id/textViewCountry"
android:layout_alignParentLeft="true" />
</RelativeLayout>
最佳答案
改变这一行
final AutoCompleteTextView autoCompleteTextViewCountry = (AutoCompleteTextView)rootView.findViewById(R.id.autoCompleteTextView1);
到
final AutoCompleteTextView autoCompleteTextViewCountry = (AutoCompleteTextView)rootView.findViewById(R.id.autoCompleteTextView);
您传递了错误的 ID,因此它给出了 NullPointerException
。
关于java - fragment 中的 AutoCompleteTextView 获取 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20018366/