2016-03-08 85 views
-2

我尝试使用imagebutton和文本进行列表视图。不知何故,当我运行它时,我的应用程序崩溃了。我需要有人可以通过我的日志查看我所犯的错误。请帮忙,因为我没有编码背景。ListView与ImageButton和文本

这里是我的main_java = IngredientChoices.java

public class IngredientChoices extends AppCompatActivity { 

ListView lv; 

String[] category_titles={"Baking Goods", "Beverages/Alcohol", "Dairy", "Fruit", "Herbs & Spices", "Meat", "Nuts & Seeds", "Pasta, Breads & Grains", "Poultry", "Sauces, Soup & Condiments", "Seafood", "Vegetables"}; 
int [] category_icons={R.drawable.bakingood,R.drawable.beverages, R.drawable.dairy, R.drawable.apple, R.drawable.herbs, R.drawable.meat, R.drawable.nuts, R.drawable.bread, R.drawable.poultry, R.drawable.soup, R.drawable.seafood, R.drawable.vegetable}; 

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

    lv = (ListView) findViewById(R.id.listView); 

    //Adapter 

    IngredientCategoryAdapter adapter = new IngredientCategoryAdapter(this, category_titles, category_icons); 
    lv.setAdapter(adapter); 

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Toast.makeText(getApplicationContext(), category_titles[position], Toast.LENGTH_SHORT).show(); 

     } 
    }); 



} 
} 

这里是我的adapter.java

public class IngredientCategoryAdapter extends ArrayAdapter<String> { 

// Declarations 
int[] category_icons={}; 
String[] category_titles={}; 
Context c; 
LayoutInflater inflater; 

public IngredientCategoryAdapter(Context context, String[]  category_title, int[] category_icon) { 
    super(context, R.layout.ingcategory_list_view, category_title); 

    this.c=context; 
    this.category_icons=category_icons; 
    this.category_titles=category_titles; 

} 

public class ViewHolder { 

    TextView category_title; 
    ImageButton category_icon; 
} 

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

    if(convertView==null){ 
     inflater= (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView=inflater.inflate(R.layout.ingcategory_list_view, null); 
    } 

    //our viewholder object 

    final ViewHolder holder = new ViewHolder(); 

    // Initialize our views 
    holder.category_title= (TextView) convertView.findViewById(R.id.category_title); 
    holder.category_icon=(ImageButton) convertView.findViewById(R.id.category_icon); 

    //Assign data 

    holder.category_icon.setImageResource(category_icons[position]); 
    holder.category_title.setText(category_titles[position]); 


    return convertView; 
} 
} 

谢谢!

崩溃日志

03-08 15:23:17.545 8166-8224 /? E/BooksSync:软错误 com.google.android.apps.books.net.HttpHelper $ AuthIoException:403:Forbidden 请求:GET https://encrypted.google.com/books?cp_activate=2%3AC4q8DQZi0PFAsa4LWbLehD8AAAA6gAd6-baW_r-qDKNVNPTjsycPW8Iqe-VhNJcXNKhi02FNTv6sb_oW-B67bwycWnmqttWYrKqXuC56--BtZlv5 HTTP/1.1 03-08 15:23:17.555 8166-8224 /? E/BooksSync:同步错误 com.google.android.apps.books.net.HttpHelper $ AuthIoException:403:Forbidden 请求:GET https://encrypted.google.com/books?cp_activate=2%3AC4q8DQZi0PFAsa4LWbLehD8AAAA6gAd6-baW_r-qDKNVNPTjsycPW8Iqe-VhNJcXNKhi02FNTv6sb_oW-B67bwycWnmqttWYrKqXuC56--BtZlv5 HTTP/1.1 03-08 15:23:20.418 1281-1281 /? E/LSO:LSO服务尚未准备好! 03-08 15:23:20.518 1281-1281 /? E/SoundPool:加载时出错/system/media/audio/ui/lens_flare_tap.ogg 03-08 15:23:20.518 1281-1281 /? E/SoundPool:error loading /system/media/audio/ui/lens_flare_unlock.ogg 03-08 15:23:20.758 300-18933 /? E/AwesomePlayer:LPAPlayer ::不超过30秒的剪辑时长设置不被支持,默认为60秒 03-08 15:23:20.758 300-18933 /? E/AwesomePlayer:LPAPlayer ::不超过30秒的剪辑时间设置不被支持,默认为60秒 03-08 15:23:20.958 300-19477 /? E/AwesomePlayer:LPAPlayer ::不超过30秒的剪辑时间设置不被支持,默认为60秒 03-08 15:23:20.958 300-19477 /? E/AwesomePlayer:LPAPlayer ::不超过30秒的剪辑持续时间设置不被支持,默认为60秒 03-08 15:23:22.050 8338-8338 /? E/Diag_Lib:Diag_LSM_Init:未能打开句柄至诊断驱动程序,错误= 2 03-08 15:23:23.571 8267-8267 /? E/SMD:smd_init start 03-08 15:23:23.571 8267-8267 /? E/SMD:smd接口打开失败,errno为2 -1 03-08 15:23:24.332 884-1422 /? E /看门狗:!@Sync 10416 03-08 15:23:24.572 8267-8267 /? E/SMD:smd接口打开失败errno是2 -1 03-08 15:23:25.573 8267-8267 /? E/SMD:smd接口打开失败,errno为2 -1 03-08 15:23:26.574 8267-8267 /? E/SMD:smd接口打开失败,errno为2 -1 03-08 15:23:27.505 8339-8339 /? E/Diag_Lib:Diag_LSM_Init:未能打开句柄到诊断驱动程序,错误= 2 03-08 15:23:27.565 8267-8267 /? E/ 03-08 15:24:00.677 884-2563 /? E/PersonaManagerService:inState():stateMachine为null! 03-08 15:24:01.058 8434-8434 /? E/AndroidRuntime:致命例外:main 进程:com.example.cassieleong.delishcart,PID:8434 java.lang.ArrayIndexOutOfBoundsException:length = 0;索引= 0 在com.example.cassieleong.delishcart.IngredientCategoryAdapter.getView(IngredientCategoryAdapter.java:59) 在android.widget.AbsListView.obtainView(AbsListView.java:2823) 在android.widget.ListView.measureHeightOfChildren(ListView的.java:1290) at android.widget.ListView.onMeasure(ListView.java:1202) at android.view.View.measure(View.java:18596) at android.widget.RelativeLayout.measureChildHorizo​​ntal(RelativeLayout。的java:728) 在android.widget.RelativeLayout.onMeasure(RelativeLayout.java:464) 在android.view.View.measure(View.java:18596) 在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java: 5827) at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:610) at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:677) at android.view.View。 measure(View.java:18596) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827) at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) at android.support.v7.widget。 ContentFr ameLayout.onMeasure(ContentFrameLayout.java:135) 在android.view.View.measure(View.java:18596) 在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827) 在android.widget.LinearLayout。 measure.ChildBeforeLayout(LinearLayout.java:1435) at android.widget.LinearLayout.measureVertical(LinearLayout.java:721) at android.widget.LinearLayout.onMeasure(LinearLayout.java:612) at android.view.View.measure( View.java:18596) 在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827) 在android.widget.FrameLayout.onMeasure(FrameLayout.java:430) 在android.view.View.measure(查看。 JA VA:18596) 在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827) 在android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1435) 在android.widget.LinearLayout.measureVertical(LinearLayout.java: 721) 在android.widget.LinearLayout.onMeasure(LinearLayout.java:612) 在android.view.View.measure(View.java:18596) 在android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5827) at android.widget.FrameLayout.onMeasure(FrameLayout.java:430) at com.android.internal.policy.impl.PhoneWindow $ DecorView.onMeasure(PhoneWindow.java:2897) at android.view.View.measure( V iew.java:18596) 在android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2248) 在android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1306) 在android.view.ViewRootImpl.performTraversals(ViewRootImpl。在android.view.View.RootImpl $ TraversalRunnable.run(ViewRootImpl.java:6642) android.view.Choreographer $ CallbackRecord.run() Choreographer.java:777) at android.view.Choreographer.doCallbacks(Choreographer.java:590) at android.view.Choreographer.doFrame(Choreographer.java:560) at android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:763) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper .loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5942) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method。调用(Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1399) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 03-08 15:24:01.448 884-8480 /? E/android.os.Debug:!@Dumpstate> sdumpstate -k -t -z -d -o/data/log/dumpstate_app_error 03-08 15:24:01.578 8267-8267 /? E/SMD:smd接口打开失败errno是2 -1 03-08 15:24:02.579 8267-8267 /? E/SMD:smd接口打开失败errno为2 -1 03-08 15:24:02.639 8503-8503 /? E/Diag_Lib:Diag_LSM_Init:未能打开句柄到诊断驱动程序,错误= 2 03-08 15:24:03.580 8267-8267 /? E/SMD:smd接口打开失败,errno为2 -1 03-08 15:24:04.581 8267-8267 /? E/SMD:smd接口打开失败,errno为2 -1 03-08 15:24:05.592 8267-8267 /? E/SMD:smd接口打开失败,errno为2 -1 03-08 15:24:06.593 8267-8267 /? E/SMD:smd接口打开失败,errno为2 -1 03-08 15:24:07.594 8267-8267 /? E/SMD:smd接口打开失败errno是2 -1

+0

您能粘贴崩溃记录吗? –

+0

我已编辑帖子。谢谢 –

回答

0

这是一个问题,有时在android中没有上下文获取资源。尝试改变:

holder.category_icon.setImageResource(category_icons[position]); 

holder.category_icon.setImageDrawable(c.getResources().getDrawable(category_icons[position])); 

编辑:确定,似乎一个(或两个)的阵列是空的。尝试PU数据你onCreate(Bundle savedInstanceState)

初始化像

ListView lv; 

String[] category_titles; 
int [] category_icons; 

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

    lv = (ListView) findViewById(R.id.listView); 

    category_titles = {"Baking Goods", "Beverages/Alcohol", "Dairy", "Fruit", "Herbs & Spices", "Meat", "Nuts & Seeds", "Pasta, Breads & Grains", "Poultry", "Sauces, Soup & Condiments", "Seafood", "Vegetables"}; 
    category_icons={R.drawable.bakingood,R.drawable.beverages, R.drawable.dairy, R.drawable.apple, R.drawable.herbs, R.drawable.meat, R.drawable.nuts, R.drawable.bread, R.drawable.poultry, R.drawable.soup, R.drawable.seafood, R.drawable.vegetable} 
    //Adapter 

    IngredientCategoryAdapter adapter = new IngredientCategoryAdapter(this, category_titles, category_icons); 
    lv.setAdapter(adapter); 
+0

holder.category_icon.setImageDrawable(c.getResources()。getDrawable(category_icons [position])); - getDrawable get被自动划掉,它仍然崩溃。 =( –

+0

可以在这里把crash的日志吗? –

+0

我在帖子中加入了crah日志。谢谢 –

0

权利之前您的适配器有一个与你的适配器构造一个问题。 更改您的适配器到:

public IngredientCategoryAdapter(Context context, String[] category_title, int[] category_icon) { 
    super(context, R.layout.ingcategory_list_view, category_title); 

    this.c=context; 
    this.category_icons=category_icon; 
    this.category_titles=category_title; 
}