2016-03-16 110 views
0

我是Android的新手,所以如果您遇到的錯誤是一個錯誤,我真的很抱歉。我嘗試通過使用custom_row.xml作爲佈局文件並將CustomAdapter.java作爲自定義適配器來創建自定義ListView(每行中包含ImageView和TextView)。簡單的自定義ListView應用程序。每次崩潰

我不明白爲什麼這個應用程序崩潰每次我運行相同。異常(如Android監視器所示)是在CustomAdapter.java文件的這一行中引起的。

View customView = myInflater.inflate(R.layout.custom_row, parent, false); 

我附上所有Java和佈局代碼以供參考。謝謝。

CustomAdapter.java

package com.abhinavankur.listexample; 


import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.ArrayAdapter; 

class CustomAdapter extends ArrayAdapter<String> { 

CustomAdapter(Context context, String[] teams) { 
    super(context,R.layout.custom_row,teams); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater myInflater = LayoutInflater.from(getContext()); 
    View customView = myInflater.inflate(R.layout.custom_row, parent, false); 

    String singleTeam = getItem(position); 
    TextView myText = (TextView) customView.findViewById(R.id.myText); 
    ImageView myImage= (ImageView) customView.findViewById(R.id.myImage); 

    myText.setText(singleTeam); 
    myImage.setImageResource(R.drawable.mine); 
    return customView; 
} 
} 

custom_row.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<ImageView 
    android:layout_width="80dp" 
    android:layout_height="80dp" 
    android:id="@+id/myImage" 
    android:src="@drawable/mine" 
    android:layout_margin="5dp" /> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:text="Large Text" 
    android:id="@+id/myText" 
    android:layout_margin="5dp" /> 
</LinearLayout> 

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.abhinavankur.listexample.MainActivity"> 

<ListView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/myListView"> 
</ListView> 
</RelativeLayout> 

MainActivity.java

package com.abhinavankur.listexample; 

import android.os.Bundle; 
import android.app.Activity; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity 
{ 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


String teams[] = {"Real Madrid","Manchester United","Barcelona","Chelsea","Bayern Munich","PSG","Borussia Dortmund","Liverpool","Arsenal","Valencia","Villareal","Leicester City","AS Roma"}; 

    ListAdapter myAdapter = new CustomAdapter(this, teams); 
    ListView myList = (ListView) findViewById(R.id.myListView); 
    myList.setAdapter(myAdapter); 
    Toast.makeText(this,"List Shown",Toast.LENGTH_LONG).show(); 

    myList.setOnItemClickListener(
      new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
        String team = String.valueOf(parent.getItemAtPosition(position)); 
        Toast.makeText(MainActivity.this,team,Toast.LENGTH_SHORT).show(); 
       } 
      } 
    ); 
} 

}

+1

「異常(如Android監視器所示)」那麼它是什麼? –

+0

添加錯誤的完整logcat。 –

回答

0

更改您的CustomAdapter如下。你錯誤地誇大了佈局。

class CustomAdapter extends ArrayAdapter<String> { 

    Context context; 

    CustomAdapter(Context context, String[] teams) { 
     super(context,R.layout.custom_row,teams); 
     this.context = context 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     if (convertView == null) { 
      LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = layoutInflater.inflate(R.layout.custom_row, null); 
     } 

     .... 
     .... 

} 
+0

我改變了它,你說的方式,但問題仍然存在。此外,我不明白我的版本膨脹佈局中出了什麼問題。 在logcat中的錯誤是如下: 致命異常:主 工藝:com.abhinavankur.listexample,PID:7943 java.lang.OutOfMemoryError:(堆大小= 12504KB,分配= 3490KB) –

相關問題