【发布时间】:2015-12-08 19:54:15
【问题描述】:
我正在开发一个应用程序,它在ListFragment 中显示一些基本的解析 JSON。
我关注了http://www.androidhive.info/2012/01/android-json-parsing-tutorial,它在ListActivity 中运行良好。然后我开始制作自己的应用程序。我在 Android Studio 1.5 中创建了新项目,添加了 Navigation Drawer Activity,因为我有更多的事情要做/显示,并开始将代码重写为片段。除了 getApplicationContext() 和 Cannot resolve method getApplciationContext() 错误的一个疯狂问题仍未解决之外,这基本上很容易。
这是我的片段的一部分:
public class Den1Fragment extends ListFragment {
private ProgressDialog pDialog;
// JSON Node names
private static final String TAG_CONTACTS = "contacts";
private static final String TAG_ID = "id";
private static final String TAG_NAME = "name";
private static final String TAG_EMAIL = "email";
private static final String TAG_ADDRESS = "address";
private static final String TAG_GENDER = "gender";
private static final String TAG_PHONE = "phone";
private static final String TAG_PHONE_MOBILE = "mobile";
private static final String TAG_PHONE_HOME = "home";
private static final String TAG_PHONE_OFFICE = "office";
// contacts JSONArray
JSONArray contacts = null;
// Hashmap for ListView
ArrayList<HashMap<String, String>> contactList;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_den1, container, false);
contactList = new ArrayList<>();
ListView lv = getListView();
// Listview on item click listener
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting values from selected ListItem
String name = ((TextView) view.findViewById(R.id.name))
.getText().toString();
String cost = ((TextView) view.findViewById(R.id.email))
.getText().toString();
String description = ((TextView) view.findViewById(R.id.mobile))
.getText().toString();
// Starting single contact activity
Intent in = new Intent(getApplicationContext(), // TODO error!
SingleContactActivity.class);
in.putExtra(TAG_NAME, name);
in.putExtra(TAG_EMAIL, cost);
in.putExtra(TAG_PHONE_MOBILE, description);
startActivity(in);
}
});
// Calling async task to get json
new GetContacts().execute();
}
如果我添加 Intent in = new Intent(**getActivity().**getApplicationContext(), SingleContactActivity.class); 错误将移动到 contactList = new ArrayList<>(); 并且 Android Studio 不知道如何解决它,甚至谷歌搜索也没有带来太多想要的结果。
我尝试以不同的重写顺序再次执行此操作,发现如果我离开 setContentView(R.layout.activity_main); 而不是将其更改为 return inflater.inflate(R.layout.fragment_den1, container, false);,setContentView 会变为红色,但 contactList 行保持“正常”。
编辑
content_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
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"
android:id="@+id/content_frame"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/app_bar_main"
tools:context=".MainActivity">
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
错误报告:
java.lang.RuntimeException: Unable to start activity ComponentInfo{cz.ludato.festapp/cz.ludato.festapp.MainActivity}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
at cz.ludato.festapp.Den1Fragment.onViewCreated(Den1Fragment.java:54)
【问题讨论】:
标签: android json android-fragments arraylist