2016-11-03 3 views
0

Итак, я создал это новое представление списка с помощью настраиваемого объекта и пользовательского адаптера. Но моя активность просто падает, когда я запускаю приложение. Я начинающий, поэтому, пожалуйста, объясните мне свою ошибку.Error ListView Custom Adapter

Это мой MainACtivity

public class MainActivity extends ListActivity { 

private ArrayList<Android> androids = new ArrayList<>(); 

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

    androids.add(new Android(R.drawable.android_a, R.string.android_a, R.string.data_a)); 
    androids.add(new Android(R.drawable.android_a, R.string.android_b, R.string.data_b)); 
    androids.add(new Android(R.drawable.cupcake, R.string.name_cupcake, R.string.data_c)); 
    androids.add(new Android(R.drawable.donut, R.string.name_donut, R.string.data_d)); 
    androids.add(new Android(R.drawable.ecalir, R.string.name_eclairs, R.string.data_e)); 
    androids.add(new Android(R.drawable.froyo, R.string.name_froyo, R.string.data_f)); 
    androids.add(new Android(R.drawable.gb, R.string.name_ginderbread, R.string.data_g)); 
    androids.add(new Android(R.drawable.honeycomb, R.string.name_honeycomb, R.string.data_h)); 
    androids.add(new Android(R.drawable.ics, R.string.name_ics, R.string.data_i)); 
    androids.add(new Android(R.drawable.jb, R.string.name_jb, R.string.data_j)); 
    androids.add(new Android(R.drawable.kk, R.string.name_kitkat, R.string.data_k)); 
    androids.add(new Android(R.drawable.lolipop, R.string.name_lolipop, R.string.data_l)); 
    androids.add(new Android(R.drawable.mashmallow, R.string.name_mashmallow, R.string.data_m)); 
    androids.add(new Android(R.drawable.nougat, R.string.name_nougat, R.string.data_n)); 


    AndroidAdapter adapter = new AndroidAdapter(this, android.R.layout.simple_list_item_1, androids); 
    ListView listView = (ListView) findViewById(R.id.list); 
    listView.setAdapter(adapter); 



} 

} 

Это мой пользовательский объект

public class Android { 

private int mImageResourceID; 
private int mAndroidVersion; 
private int mAndroidDetails; 

public Android(){ } 

public Android(int imageResourceID, int androidVersion , int androidDetails) 
{ 
    mImageResourceID = imageResourceID; 
    mAndroidVersion = androidVersion; 
    mAndroidDetails = androidDetails; 
} 
int getImageResourceID() 
{ 
    return mImageResourceID; 
} 
int getAndroidVersion() 
{ 
    return mAndroidVersion; 
} 
int getAndroidDetails() 
{ 
    return mAndroidDetails; 
} 

}

Это мой пользовательский адаптер

public class AndroidAdapter extends ArrayAdapter<Android> { 

private ArrayList<Android> android; 


public AndroidAdapter(Context context, int resource , ArrayList<Android>android) { 
    super(context, resource,android); 
    this.android = android; 
} 

@NonNull 
@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    if(v==null) 
    { 
     LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     inflater.inflate(R.layout.list_view , null); 

    } 

    Android i = android.get(position); 

    if(i!= null) 
    { 
     ImageView image = (ImageView) v.findViewById(R.id.image_android); 
     TextView androidName = (TextView) v.findViewById(R.id.android_name); 
     TextView androidDetails = (TextView) v.findViewById(R.id.android_details); 

     image.setImageResource(i.getImageResourceID()); 
     androidName.setText(i.getAndroidVersion()); 
     androidDetails.setText(i.getAndroidDetails()); 

    } 
    return v; 

} 

}

Это сообщение об ошибке я получаю

11-03 22:25:40.531 31629-31629/com.example.android.android E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.example.android.android, PID: 31629 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.android/com.example.android.android.MainActivity}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3319) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415) 
    at android.app.ActivityThread.access$1100(ActivityThread.java:229) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:7325) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
    Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 
    at android.app.ListActivity.onContentChanged(ListActivity.java:243) 
    at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:492) 
    at android.app.Activity.setContentView(Activity.java:2400) 
    at com.example.android.android.MainActivity.onCreate(MainActivity.java:24) 
    at android.app.Activity.performCreate(Activity.java:6904) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3266) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)  
    at android.app.ActivityThread.access$1100(ActivityThread.java:229)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:148)  
    at android.app.ActivityThread.main(ActivityThread.java:7325)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  
11-03 22:25:43.121 31629-31629/com.example.android.android I/ 
Process: Sending signal. PID: 31629 SIG: 9 

Пожалуйста, помогите мне с этим.

+0

Возможный дубликат http://stackoverflow.com/questions/11050817/your-content-must-have-a-listview-whose-id-attribute-is-android-r-id-list –

ответ

0

Существует несколько ошибок, которые необходимо соблюдать.

  1. В классе активности вам нужно пройти андроид расположение по умолчанию в list_item_layout и нет.

    AndroidAdapter adapter = new AndroidAdapter(this, R.layout.list_view, androids); 
    
  2. После этого вызова ниже метод установки адаптера.

    setListAdapter(adapter); 
    
  3. В файле макета активность убеждаться, что ListView идентификатор, как показано ниже

    android:id="@+id/android:list" 
    
  4. Вы не назначая надутый вид любого объекта класса адаптера.

    v = inflater.inflate(R.layout.list_view , null); 
    

Или вы можете использовать BaseAdapter.

Смежные вопросы