[英]How to show alert dialog for certain list item
每當我選擇一個特定的列表項時,我都會嘗試顯示一個警報對話框,而其他人會打開一個新的片段。 但是,在插入 alreat 對話框代碼后,將返回錯誤。 我不明白為什么當“意圖”已經被初始化時我會收到這個錯誤。 可以做些什么來解決這個問題?
變量“意圖”可能尚未初始化
片段水果選擇器
public class FragmentFruitChooser extends ListFragment {
public FragmentFruitChooser() {
// Required empty constructor
}
/**
* Whether or not the activity is in two-pane mode, i.e. running on a tablet
* device.
*/
public boolean mTwoPane;
public static FragmentFruitChooser newInstance() {
return new FragmentFruitChooser();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_fruit_chooser, container, false);
initialize();
return view;
}
List<Fruits> list = new ArrayList<>();
private void initialize() {
String[] items = getActivity().getResources().getStringArray(R.array.fruit_names);
String[] itemDescriptions = getActivity().getResources().getStringArray(R.array.fruit_descriptions);
for (int n = 0; n < items.length; n++){
Fruit fruit = new Fruit();
fruit.setID();
fruit.setName(items[n]);
fruit.setDescription(itemDescriptions[n]);
list.add(fruit);
}
FruitListAdapter mAdapter = new FruitListAdapter(list, getActivity());
setListAdapter(mAdapter);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
View v = getView();
mTwoPane = getActivity().findViewById(R.id.detail_container) != null;
assert v != null;
ListView lv = (ListView)v.findViewById(android.R.id.list);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// get the adapter, then get the name from the adapter at that position
FruitListAdapter adapter = (FruitListAdapter) parent.getAdapter();
//reverse the selected state in data model
for (int i = 0; i < adapter.getCount(); i++) {
Fruit fruit = (Fruit)adapter.getItem(i);
fruit.setSelected(i == position);
}
Fruit fruit = (Fruit)adapter.getItem(position);
if (!mTwoPane) {
Intent intent;
if (fruit.getFruit().equals(view.getResources().getString(R.string.apple))) {
intent = new Intent(getActivity(), FruitAppleActivity.class);
} else if (fruit.getFruit().equals(view.getResources().getString(R.string.orange))) {
intent = new Intent(getActivity(), FruitOrangeActivity.class);
} else if (fruit.getFruit().equals(view.getResources().getString(R.string.tomato))) {
AlertDialog ad = new AlertDialog.Builder(getContext())
.create();
ad.setCancelable(false);
ad.setTitle("Seeded Fruit");
ad.setMessage("This fruit contains seeds.");
ad.setButton(context.getString(R.string.ok_text), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
ad.show();
} else {
intent = new Intent(getActivity(), FruitAppleActivity.class);
}
startActivity(intent);
}
}
});
super.onActivityCreated(savedInstanceState);
}
}
不太確定你的程序是如何工作的,但是在你的第二個else if
語句中,你的intent
沒有被初始化,但是startActivity(intent)
仍然被調用:
} else if (fruit.getFruit().equals(view.getResources().getString(R.string.tomato))) {
AlertDialog ad = new AlertDialog.Builder(getContext())
.create();
ad.setCancelable(false);
ad.setTitle("Seeded Fruit");
ad.setMessage("This fruit contains seeds.");
ad.setButton(context.getString(R.string.ok_text), new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
ad.show();
} else {
intent = new Intent(getActivity(), FruitAppleActivity.class);
}
startActivity(intent);
您可以按照@seanAshmore 的回答進行操作,但仍可能導致 NPE。 我建議在實際調用startActivity()
之前簡單地為意圖添加一個空檢查器,如下所示:
if (intent != null) {
startActivity(intent);
} else {
Log.d(FragmentFruitChooser.class.getSimpleName(), "Intent is null");
}
您可以為每個if
/ elif
/ else
語句放置單獨的Intent intent = new Intent(...)
以確保確定。 但這是你的代碼,所以你會怎么做。 :D 希望這會有所幫助。 祝你好運。 :)
試試 Intent intent = null; 而不是 Intent 意圖; 很難說,但我認為這應該可以解決您的問題 –
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.