android - 为什么我的 ListView 不显示任何内容?

标签 android listview android-listview android-adapter android-adapterview

我正在尝试在 Android 中创建一个 NavigationDrawer 布局,主面板工作正常,抽屉是一个 ListView。我试过用 TextView 替换 ListView,效果很好。所以,这是我将字符串内容添加到 ListView 的代码。

这是相关代码。

private ArrayList<String> drawerContentStrings = new ArrayList<>();
private DrawerLayout homeLayout;
private ListView navigationDrawer;
private GridLayout homeContent;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.home_layout);
    //homeContent = (GridLayout) findViewById(R.id.home_content);
    //drawerContentStrings = getResources().getStringArray(R.array.navigation_content_strings);
    //homeLayout = (DrawerLayout) findViewById(R.id.home_layout);
    navigationDrawer = (ListView) findViewById(R.id.navigation_drawer);
    System.out.println(drawerContentStrings.get(0));
    ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.nav_panel_item, drawerContentStrings);
    navigationDrawer.setAdapter(arrayAdapter);


} 

这是 nav_panel_item 的代码(在布局文件夹中)

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:textColor="#000"
/>

这里是实际 DrawerLayout 的代码:(idk,如果这甚至是相关的)

<GridLayout
    android:id="@+id/home_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnCount="2"
    android:orientation="horizontal"
    android:rowCount="2">

    <Button
        android:id="@+id/button1"
        android:layout_gravity="left|top"
        android:text="Button" />

    <Button
        android:id="@+id/button2"
        android:layout_gravity="left|top"
        android:text="Button" />

    <Button
        android:id="@+id/button3"
        android:layout_gravity="left|top"
        android:text="Button" />

    <Button
        android:id="@+id/button4"
        android:layout_gravity="left|top"
        android:text="Button" />

</GridLayout>

<ListView android:id="@+id/navigation_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="#aff"/>

那么,我该怎么做呢?因为我不知道。谢谢!

最佳答案

在strings.xml中,创建一个数组列表:

<string-array name="drawer_options">
    <item>Test</item>
    <item>Test</item>
    <item>Test</item>
</string-array>

创建一个名为 activity_drawer.xml 的新布局文件:

<?xml version="1.0" encoding="utf-8"?>
<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" >

<FrameLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</FrameLayout>

<ListView
    android:id="@+id/nav_drawer"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="#fff"
    android:choiceMode="singleChoice" />

</android.support.v4.widget.DrawerLayout>

新建一个Activity,取名为BaseActivity;它将帮助您创建 NavigationDrawer。

public class BaseActivity extends ActionBarActivity implements AdapterView.OnItemClickListener {

private ListView drawerList;
private DrawerLayout drawerLayout;
private ActionBarDrawerToggle mDrawerToggle;
private String[] options;

private TextView titleActionBar;

protected FrameLayout content;

protected void onCreateDrawer(final int layoutResID) {
    setContentView(R.layout.activity_drawer);

    content = (FrameLayout) findViewById(R.id.content_frame);
    getLayoutInflater().inflate(layoutResID, content, true);

    setupActionBar();

    options = getResources()
            .getStringArray(R.array.drawer_options);

    drawerLayout =
            (DrawerLayout) findViewById(R.id.drawer_layout);

    drawerList = (ListView) findViewById(R.id.nav_drawer);

    drawerList.setAdapter(new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, options));

    drawerList.setOnItemClickListener(this);

    setupDrawer();

}

private void setupActionBar() {
           getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    getSupportActionBar().setCustomView(R.layout.action_bar);

    titleActionBar = (TextView) findViewById(R.id.title_action_bar);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
}


private void setupDrawer() {
    mDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close) {

        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            titleActionBar.setText("AppName");
            invalidateOptionsMenu();
        }

        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            titleActionBar.setText("Options");
            invalidateOptionsMenu();
        }
    };

    mDrawerToggle.setDrawerIndicatorEnabled(true);
    drawerLayout.setDrawerListener(mDrawerToggle);
}

//get the position of the clicked list item
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    switch (position) {
        case 2:
    //For example, I redirect users to LoginActivity when they click on position 2 //(in this case, last item)
            startActivity(new Intent(getApplicationContext(),     LoginActivity.class));
            drawerLayout.closeDrawer(drawerList);
            break;
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.home_menu, menu);
    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}
}

在主 Activity 中:

public class HomeActivity extends BaseActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    super.onCreateDrawer(R.layout.home_activity);
}
}

home_activity.xml 是一个“普通”布局文件。示例:

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

<LinearLayout 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:orientation="vertical"
    android:id="@+id/home_activity"
    android:weightSum="1">

    <TextView
        android:gravity="center"
        android:text="Hello"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="10dp"
        android:padding="10dp"
        android:textSize="20dp"
        android:textStyle="bold"/>

</LinearLayout>
</ScrollView>

关于android - 为什么我的 ListView 不显示任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31198401/

相关文章:

android - 使用sharedPreferences在Flutter中保存开关状态

Android GridView,回收两个不同的单元格?

java - 安卓 : How to Add ArrayList of object in List View (But not all Attribute)?

android - 如何从 Android 中的 ListView 禁用(暗淡)onItemLongClick 中的选项?

android - ListView Header中的EditText不可编辑

android - 变换矩阵后如何获得 View 的正确边界

提升 child 时的Android FrameLayout z-index问题

java - 如何在android中设备方向改变后保持listview项目的高亮

android - 列表项长按转场

android - FragmentManager.popBackStack() 并不是简单的加载之前的Fragment