android:app中的listView不幸停止工作

时间:2014-12-28 19:03:08

标签: java android xml listview

我正在尝试使用列表视图和数据库创建一个应用程序。但每次我想编译它时我的应用程序显示消息

  

" 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>

我检查了数据库类没有问题。我认为问题出在适配器类上但是我无法识别它。

2 个答案:

答案 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;。这将解决您的问题我确定