Android 从CustomAdapter ListView切换到标准ArrayAdapter ListView失败

Android 从CustomAdapter ListView切换到标准ArrayAdapter ListView失败,android,android-layout,Android,Android Layout,我最近对Android编码感兴趣,并通过一些教程学习。然而,现在我被困了一天,希望你们能帮助我 基本上我想为每个主菜单条目创建一个主菜单和一个子菜单。(目前这只是第一个条目的情况) 对于主菜单,我使用了带有不同图标的列表视图(通过自定义适配器实现)。选择一个菜单项通常可以正常工作,但如果我选择配置onitemclick以启动另一个(简单的)ListView,它使用ArrayAdapter,在切换到子菜单活动后会中断 奇怪的是,如果我在两个列表视图中都使用ArrayAdapter,那就没有问题;在

我最近对Android编码感兴趣,并通过一些教程学习。然而,现在我被困了一天,希望你们能帮助我

基本上我想为每个主菜单条目创建一个主菜单和一个子菜单。(目前这只是第一个条目的情况)

对于主菜单,我使用了带有不同图标的列表视图(通过自定义适配器实现)。选择一个菜单项通常可以正常工作,但如果我选择配置onitemclick以启动另一个(简单的)ListView,它使用ArrayAdapter,在切换到子菜单活动后会中断

奇怪的是,如果我在两个列表视图中都使用ArrayAdapter,那就没有问题;在两者中使用CustomAdapter时也是如此

这是代码,提前感谢您的帮助;)

主菜单:

public class MainActivity extends ListActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // storing string resources into Array contentmenu
    String[] contentmenu = getResources().getStringArray(R.array.mainmenu_cats);
    // storing icons in Array
    TypedArray iconarray = getResources().obtainTypedArray(R.array.mainmenu_icons);

    // Binding resources Array to ListAdapter
    this.setListAdapter(new ImageAndTextAdapter(this, R.layout.list_item, contentmenu, iconarray));

    ListView lv = getListView();

    // listening to single list item on click
    lv.setOnItemClickListener(new OnItemClickListener() {
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {


          // Launching new Activity on selecting single List Item
          switch( position )
            {
               case 0:  Intent newActivity0 = new Intent(getApplicationContext(),SubActivity.class);     
                        startActivity(newActivity0);
                        break;

               case 1:  Intent newActivity1 = new Intent(getApplicationContext(),SubActivity2.class);     
                        startActivity(newActivity1);                            
                        break;

            }

      }
    });


}
public类MainActivity扩展了ListActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//将字符串资源存储到数组contentmenu中
String[]contentmenu=getResources().getStringArray(R.array.main菜单);
//在阵列中存储图标
TypedArray iconarray=getResources().obtainTypedArray(R.array.main菜单图标);
//将资源数组绑定到ListAdapter
this.setListAdapter(新的ImageAndTextAdapter(this,R.layout.list_项,contentmenu,iconarray));
ListView lv=getListView();
//在单击时侦听单个列表项
lv.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//在选择单个列表项时启动新活动
开关(位置)
{
案例0:Intent newActivity0=新Intent(getApplicationContext(),SubActivity.class);
startActivity(newActivity0);
打破
案例1:Intent newActivity1=newintent(getApplicationContext(),SubActivity2.class);
startActivity(新活动1);
打破
}
}
});
}
子菜单:

public class SubActivity extends ListActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    // storing string resources into Array
    String[] submen_1 = getResources().getStringArray(R.array.submenu_1);

    // Binding resources Array to ListAdapter
    setListAdapter(new ArrayAdapter<String>(ctx, R.layout.list_item1, R.id.submen1, submen_1));

    ListView sublv1 = getListView();

    // listening to single list item on click
    sublv1.setOnItemClickListener(new OnItemClickListener() {
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {

          // Launching new Activity on selecting single List Item
          Intent newActivity = new Intent(getApplicationContext(),Page1.class);     
          // sending data to new activity
          newActivity.putExtra("position",position);
          startActivity(newActivity);

          }
    });
    }
公共类子活动扩展了ListActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//将字符串资源存储到数组中
String[]submen_1=getResources().getStringArray(R.array.submenu_1);
//将资源数组绑定到ListAdapter
setListAdapter(新阵列适配器(ctx,R.layout.list_item1,R.id.submen1,submen_1));
ListView sublv1=getListView();
//在单击时侦听单个列表项
sublv1.setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//在选择单个列表项时启动新活动
Intent newActivity=newintent(getApplicationContext(),Page1.class);
//向新活动发送数据
newActivity.putExtra(“位置”,位置);
星触觉(新活动);
}
});
}
xml主菜单: list_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:id="@+id/option_icon"
android:layout_width="48dp"
android:layout_height="fill_parent"/>
<TextView
   android:id="@+id/option_text"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:textSize="16dp" >
</TextView>

子菜单: list_item1.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:id="@+id/icon1"
android:layout_width="48dp"
android:layout_height="fill_parent"
android:src="@drawable/ic_action_google_play" />
<TextView
   android:id="@+id/submen1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:textSize="16dp" >
</TextView>


当前您没有在
列表项.xml
列表项1.xml
布局中定义
线性布局的高度和宽度。添加高度和宽度如下:

在list_item.xml中:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android">
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

   <!-- PUT YOUR ImageView or other xml elements here -->

</LinearLayout>

android:layout\u width=“fill\u parent”
android:layout\u height=“fill\u parent”
android:orientation=“vertical”>

对当前代码中出现的问题进行同样的处理,并添加logcat结果,询问应用程序是否崩溃。当选择主菜单列表的第一项时,它总是崩溃。下面是QUs2IE9wEh7vAqCROGvQuUnUahQQSWCpoypPEhOKfc0plz用于共享logcatplz的关键enu_图标、.main菜单_猫和列表项布局xml使用@Joy:实际上您缺少在xml布局中添加
android:layout_width
,请重新检查