我正在尝试使用列表视图和数据库创建一个应用程序。但每次我想编译它时我的应用程序显示消息
" app很遗憾地停止了工作"
我的代码如下:
MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
FixtureAdapter adapter;
DatabaseClass db=new DatabaseClass(this);
db.addFixture(new Fixture("Bangladesh","Australis","Melborne","22 feb 2014"));
db.addFixture(new Fixture("India","Pakistan","Sydney","15 feb 2014"));
ArrayList<Fixture> fx= db.getAllContacts();
adapter = new FixtureAdapter(this,
fx);
ListView dataList = (ListView) findViewById(R.id.list);
dataList.setAdapter(adapter);
}
}
适配器calss:
public class FixtureAdapter extends ArrayAdapter<Fixture> {
Activity context;
int layoutResourceId;
ArrayList<Fixture> data=new ArrayList<Fixture>();
/*public FixtureAdapter(Context context , int layoutResourceId, ArrayList<Fixture> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = (Activity)context;
this.data = data;
}*/
public FixtureAdapter(Context context , ArrayList<Fixture> data) {
super(context, R.layout.fixture, data);
this.context = (Activity)context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = null;
if(convertView == null)
{
LayoutInflater inflater = (LayoutInflater)context.getLayoutInflater();
row = inflater.inflate( R.layout.fixture,null);
TextView teamone=(TextView)row.findViewById(R.id.teamOneName);
TextView teamtwo=(TextView)row.findViewById(R.id.teamTwoName);
TextView vs=(TextView)row.findViewById(R.id.vs);
TextView venue=(TextView)row.findViewById(R.id.venue);
TextView date=(TextView)row.findViewById(R.id.date);
ImageView teamoneimg = (ImageView) row.findViewById(R.id.teamOneImg);
ImageView teamtwoimg = (ImageView) row.findViewById(R.id.teamTwoImg);
Fixture f=data.get(position);
teamone.setText(f.getTeamOne());
teamtwo.setText(f.getTeamTwo());
vs.setText("Vs");
venue.setText(f.getVenue());
date.setText(f.getDateInt());
if(teamone.getText().toString()=="Bangladesh")
{
teamoneimg.setImageResource(R.drawable.fb);
}
else
{
teamoneimg.setImageResource(R.drawable.ic_launcher);
teamtwoimg.setImageResource(R.drawable.ic_launcher);
}
}
return row;
}
}
Xml文件:
main.xml中 `
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>`
fixture.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="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="18dp"
android:layout_marginTop="27dp"
android:orientation="vertical"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2"
android:orientation="horizontal" >
<!-- first team and name -->
<LinearLayout
android:layout_height="match_parent"
android:layout_weight="2"
android:orientation="vertical" >
<ImageView
android:id="@+id/teamOneImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/abc_ab_bottom_solid_dark_holo" />
<TextView
android:id="@+id/teamOneName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:text="team 1" />
</LinearLayout>
<!-- vs -->
<LinearLayout
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="1" >
<TextView
android:id="@+id/vs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Vs"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:paddingTop="15dp"
/>
</LinearLayout>
<!-- second team and name -->
<LinearLayout
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="2" >
<ImageView
android:id="@+id/teamTwoImg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/abc_ab_bottom_solid_dark_holo" />
<TextView
android:id="@+id/teamTwoName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:text="Team two" />
</LinearLayout>
<!-- venue and date -->
<LinearLayout
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_weight="2" >
<TextView
android:id="@+id/venue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Venue" />
<TextView
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:text="Date and time" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
我检查了数据库类没有问题。我认为问题出在适配器类上但是我无法识别它。
答案 0 :(得分:0)
首先,编译时错误与运行时错误不同。关于你的应用程序“停止工作”的消息是一个ru时间错误,与编译它无关。
其次,在getView(...)
适配器方法中,除非convertView
为空,否则返回null。
按如下方式更改适配器的getView(..)
方法(另请注意比较Java中字符串的正确方法 - 我已对代码进行了评论)...
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if(row == null)
{
LayoutInflater inflater = (LayoutInflater)context.getLayoutInflater();
row = inflater.inflate( R.layout.fixture,null);
}
TextView teamone=(TextView)row.findViewById(R.id.teamOneName);
TextView teamtwo=(TextView)row.findViewById(R.id.teamTwoName);
TextView vs=(TextView)row.findViewById(R.id.vs);
TextView venue=(TextView)row.findViewById(R.id.venue);
TextView date=(TextView)row.findViewById(R.id.date);
ImageView teamoneimg = (ImageView) row.findViewById(R.id.teamOneImg);
ImageView teamtwoimg = (ImageView) row.findViewById(R.id.teamTwoImg);
Fixture f=data.get(position);
teamone.setText(f.getTeamOne());
teamtwo.setText(f.getTeamTwo());
vs.setText("Vs");
venue.setText(f.getVenue());
date.setText(f.getDateInt());
// NOTE: The correct way to compare strigs in Java is to use .equals(...)
// Using == to compare strings will NOT work
if(teamone.getText().toString().equals("Bangladesh"))
{
teamoneimg.setImageResource(R.drawable.fb);
}
else
{
teamoneimg.setImageResource(R.drawable.ic_launcher);
teamtwoimg.setImageResource(R.drawable.ic_launcher);
}
return row;
}
答案 1 :(得分:0)
ur java文件没有问题。你的问题在fixture.xml文件中。在嵌套的Linearlayout(垂直)你定义&#34; android:layout_weight&#34;所以你的&#34; android:layout_height&#34;应设置为&#34; 0dp&#34;但你设置它&#34; match_parent&#34; 。这就是为什么你的应用每次尝试在你的应用程序中使用以下代码时崩溃的原因定义&#34; android:layout_height&#34; &#34; wrap_content / match_parent&#34;。这将解决您的问题我确定