0

我正面临有关Android的导航抽屉菜单实施的问题。正确的,当我尝试通过字符串适配器填充字符串列表(或数组,两者都不工作)的左侧菜单选项时,应用程序崩溃得太快以至于LogCat不捕获任何消息。抽屉列表阵列适配器崩溃应用程序

主要活动错误部分:

package edu.getjedi.frontend.mobile; 

import android.Manifest; 
import android.content.pm.PackageManager; 
import android.support.v4.app.ActivityCompat; 
import android.support.v4.app.FragmentActivity; 
import android.os.Bundle; 
import android.support.v4.widget.DrawerLayout; 
import android.util.Log; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 

import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.SupportMapFragment; 

import java.util.ArrayList; 

public class MainMapActivity extends FragmentActivity implements OnMapReadyCallback { 
private UserLocationHandler locationHandler; 
private DrawerLayout mDrawerLayout; 
private ListView mDrawerList; 

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

    ArrayList<String> test = new ArrayList<>(); 

    test.add("abc"); 
    test.add("def"); 
    test.add("ghi"); 

    setContentView(R.layout.activity_main); 
    // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerList = (ListView) findViewById(R.id.left_drawer); 
    // Set the list's click listener 
    mDrawerList.setOnItemClickListener(new DrawerMenuHandler()); 
    mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.activity_main, test)); // Trouble is here!! 
} 

(...) 

如果我评论的mDrawerList.setAdapter(...)线,一切工作得很好。


布局/ activity_main.xml中:

<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<!-- The main content view --> 
<fragment xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:map="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/map" 
    android:name="com.google.android.gms.maps.SupportMapFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="edu.getjedi.frontend.mobile.MainMapActivity" /> 
<!-- The navigation drawer --> 
<ListView android:id="@+id/left_drawer" 
    android:layout_width="240dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:choiceMode="singleChoice" 
    android:divider="@android:color/transparent" 
    android:dividerHeight="0dp" 
    android:background="#111"/> 
</android.support.v4.widget.DrawerLayout> 

我遵循的指导: Navigation Drawer - Android Developers

有什么教程,我的代码示例之间的区别? - FrameLayout是一个映射片段,包含一个指向MainMapActivity的指针作为上下文。


应用程序通过抽射稍稍罚款处理GPS和HTTP请求,但是当我加入这一行

 mDrawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.activity_main, test)); 

它拒绝启动,并产生任何有用的信息。

任何帮助表示赞赏。 感谢您的阅读。

回答

2

您完全错误地使用它。

new ArrayAdapter<String>(CONTEXT,VIEW_ID_TO_SHOW_TEXT, YOUR_LIST) 

您不应该通过R.layout.activity_main它。使用方法:

android.R.layout.simple_list_item_1

或使您的自定义布局,只是一个文本视图。

new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, test) 
+0

现在理解了。第二个参数是用来显示数组内容的布局,而不是我之前认为的抽屉所在的布局。谢谢,它的工作原理:-) –

1

正如指出由Smariz:第二个参数是将要用于显示阵列的内容,而不是在其抽屉处于,正如我以前认为的视图的视图。

创建布局/ menu_list.xml是你的适配器模板:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/tv" 
android:textColor="#FFF" 
android:paddingTop="5sp" 
android:layout_width="fill_parent" 
android:background="#111" 
android:maxLines="1" 
android:gravity="left" 
android:layout_height="fill_parent"/> 

(或简单的使用由Android提供的,像android.R.layout.simple_list_item_1的那些之一)

参考它或另一个布局被适配器用来在屏幕上放置你的数组内容:

drawerList.setAdapter(new ArrayAdapter<String>(this, R.layout.menu_list, yourList)); 
相关问题