简单的 ListView 项目正在崩溃,但未显示任何错误
Simple ListView project is crashing, but no errors are shown
当我 运行 我的项目时,消息控制台中没有错误,但它一直崩溃。我找不到原因。我试图解决一些类似的问题,并确实实施了给定的解决方案,但它仍然没有帮助我。这是我的代码。
package com.example.omar.quakereport;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
public class EarthquakeActivity extends AppCompatActivity {
ListView earthquakeListView;
ArrayList<String> earthquakes;
ArrayAdapter<String> adapter;
// public static final String LOG_TAG = EarthquakeActivity.class.getName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.earthquake_activity);
// Create a fake list of earthquake locations.
earthquakes = new ArrayList<>();
earthquakes.add("San Francisco");
earthquakes.add("London");
earthquakes.add("Tokyo");
earthquakes.add("Mexico City");
earthquakes.add("Moscow");
earthquakes.add("Rio de Janeiro");
earthquakes.add("Paris");
// Find a reference to the {@link ListView} in the layout
earthquakeListView = (ListView) findViewById(R.id.list);
// Create a new {@link ArrayAdapter} of earthquakes
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, earthquakes);
// Set the adapter on the {@link ListView}
// so the list can be populated in the user interface
earthquakeListView.setAdapter(adapter);
}
}
这是我的 getter 所在的 class:
package com.example.omar.quakereport;
public class Earthquakes {
private String mMagnitude;
private String mLocation;
private String mDate;
public Earthquakes(String magnitude, String location, String date){
mMagnitude = magnitude;
mLocation = location;
mDate = date;
}
public String getMagnitude(){
return mMagnitude;
}
public String getLocation(){
return mLocation;
}
public String getDate(){
return mDate;
}
这是我的 activity xml:
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
这是我的列表项xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
ListView 没有方向属性。
您应该将 ListView 包装在 Relative/Linear/Frame-Layout
中
然后,您需要使用 ArrayAdapter<Earthquake> adapter;
(see here)(并使您的 class 名称成为单数)。或者,您需要在地震 class 上实施 toString()
,因为那是 ArrayAdapter<String>
用来显示数据的内容。
然后,编辑项目布局以添加 TextViews 来显示和地震数据,最后使用地震项目xml布局,不是android.R.layout.simple_list_item_1
一旦你有了那个适配器,你实际上可以这样做来添加和显示数据
adapter.add(new Earthquake("magnitude", "location", "date"));
当我 运行 我的项目时,消息控制台中没有错误,但它一直崩溃。我找不到原因。我试图解决一些类似的问题,并确实实施了给定的解决方案,但它仍然没有帮助我。这是我的代码。
package com.example.omar.quakereport;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
public class EarthquakeActivity extends AppCompatActivity {
ListView earthquakeListView;
ArrayList<String> earthquakes;
ArrayAdapter<String> adapter;
// public static final String LOG_TAG = EarthquakeActivity.class.getName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.earthquake_activity);
// Create a fake list of earthquake locations.
earthquakes = new ArrayList<>();
earthquakes.add("San Francisco");
earthquakes.add("London");
earthquakes.add("Tokyo");
earthquakes.add("Mexico City");
earthquakes.add("Moscow");
earthquakes.add("Rio de Janeiro");
earthquakes.add("Paris");
// Find a reference to the {@link ListView} in the layout
earthquakeListView = (ListView) findViewById(R.id.list);
// Create a new {@link ArrayAdapter} of earthquakes
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, earthquakes);
// Set the adapter on the {@link ListView}
// so the list can be populated in the user interface
earthquakeListView.setAdapter(adapter);
}
}
这是我的 getter 所在的 class:
package com.example.omar.quakereport;
public class Earthquakes {
private String mMagnitude;
private String mLocation;
private String mDate;
public Earthquakes(String magnitude, String location, String date){
mMagnitude = magnitude;
mLocation = location;
mDate = date;
}
public String getMagnitude(){
return mMagnitude;
}
public String getLocation(){
return mLocation;
}
public String getDate(){
return mDate;
}
这是我的 activity xml:
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
这是我的列表项xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
ListView 没有方向属性。
您应该将 ListView 包装在 Relative/Linear/Frame-Layout
中然后,您需要使用 ArrayAdapter<Earthquake> adapter;
(see here)(并使您的 class 名称成为单数)。或者,您需要在地震 class 上实施 toString()
,因为那是 ArrayAdapter<String>
用来显示数据的内容。
然后,编辑项目布局以添加 TextViews 来显示和地震数据,最后使用地震项目xml布局,不是android.R.layout.simple_list_item_1
一旦你有了那个适配器,你实际上可以这样做来添加和显示数据
adapter.add(new Earthquake("magnitude", "location", "date"));