Android ListView仅显示一个项目

时间:2017-04-20 12:56:17

标签: android listview

我正在尝试创建包含所有当前安装的用户应用的列表视图。 我面临的问题是ListView只显示一个条目,我无法弄清楚我做错了什么。

我在其他地方使用相同的代码(使用JSON结果),它工作正常。

这是我的活动XML

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="@color/colorPrimary"
tools:context=".AppsList">

<ListView
    android:id="@+id/applistview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_above="@+id/button1"
    android:layout_alignParentTop="true" />

<Button
    android:id="@+id/button1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:text="Close" />

</RelativeLayout>

我的列表项XML

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

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:background="@color/colorPrimary"
    android:layout_centerHorizontal="true"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:weightSum="6" >

        <ImageView
            android:id="@+id/app_icon"
            android:layout_width="45dp"
            android:layout_height="45dp"
            android:layout_weight="1"
            android:src="@drawable/frissonhead" />

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="4"
            android:orientation="vertical"
            android:weightSum="2">

            <TextView
                android:id="@+id/app_name"
                android:layout_width="258dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:text="Soon To Clear"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:textColor="@color/colorAccent"
                android:textSize="20dp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/app_package"
                android:layout_width="258dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:text="Soon To Clear"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:textColor="@color/colorAccent"
                android:textSize="12dp" />

        </LinearLayout>


        <CheckBox
            android:id="@+id/app_check"
            android:layout_width="25dp"
            android:layout_height="match_parent"
            android:layout_weight="1.02"
            android:checked="false"
            android:gravity="center" />

    </LinearLayout>

</LinearLayout>

</RelativeLayout>

和我的活动Java

package com.fixmypcscotland.childsafe;

import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class AppsList extends AppCompatActivity {

SharedPreferences sharedPreferences;
SharedPreferences.Editor editor;
ListView list;

ArrayList<HashMap<String, String>> oslist;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
    setContentView(R.layout.activity_apps_list);
    sharedPreferences = getSharedPreferences("CHILD_MODE", MODE_PRIVATE);
    editor = sharedPreferences.edit();
    list = (ListView)findViewById(R.id.applistview);
    oslist = new ArrayList<HashMap<String, String>>();
    final PackageManager pm = getPackageManager();
    //get a list of installed apps.
    List<ApplicationInfo> packages = 
 pm.getInstalledApplications(PackageManager.GET_META_DATA);

    HashMap<String, String> map = new HashMap<String, String>();

    for (ApplicationInfo packageInfo : packages) {
        String appkg = packageInfo.packageName;
        String apn = pm.getApplicationLabel(packageInfo).toString();
        map.put("APPPKG", appkg);
        map.put("APPNAME", apn);
    }
    oslist.add(map);


    ListAdapter adapter = new SimpleAdapter(AppsList.this, oslist, R.layout.activity_apps_list_item, new String[]{"APPPKG", "APPNAME"}, new int[]{R.id.app_package, R.id.app_name});

    list.setAdapter(adapter);
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            editor.putString("bid", oslist.get(+position).get("APPPKG"));
            editor.commit();
Toast.makeText(getApplicationContext(), oslist.get(+position).get("APPPKG"), Toast.LENGTH_LONG).show();

            }
        });
    }
}

感谢任何帮助。它让我疯狂。

3 个答案:

答案 0 :(得分:1)

使用此列表更改列表项。

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="7dp"
    android:background="@color/colorPrimary" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:background="@color/colorPrimary"
        android:layout_centerHorizontal="true"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:weightSum="6" >

            <ImageView
                android:id="@+id/app_icon"
                android:layout_width="45dp"
                android:layout_height="45dp"
                android:layout_weight="1"
                android:src="@drawable/frissonhead" />

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="4"
                android:orientation="vertical"
                android:weightSum="2">

                <TextView
                    android:id="@+id/app_name"
                    android:layout_width="258dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:gravity="center_vertical"
                    android:text="Soon To Clear"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:textColor="@color/colorAccent"
                    android:textSize="20dp"
                    android:textStyle="bold" />

                <TextView
                    android:id="@+id/app_package"
                    android:layout_width="258dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:gravity="center_vertical"
                    android:text="Soon To Clear"
                    android:textAppearance="?android:attr/textAppearanceLarge"
                    android:textColor="@color/colorAccent"
                    android:textSize="12dp" />

            </LinearLayout>


            <CheckBox
                android:id="@+id/app_check"
                android:layout_width="25dp"
                android:layout_height="match_parent"
                android:layout_weight="1.02"
                android:checked="false"
                android:gravity="center" />

        </LinearLayout>

    </LinearLayout>

</RelativeLayout>

了解适配器click here,您可以从此处获得提示。

答案 1 :(得分:0)

for (ApplicationInfo packageInfo : packages) {
    String appkg = packageInfo.packageName;
    String apn = pm.getApplicationLabel(packageInfo).toString();
    map.put("APPPKG", appkg);
    map.put("APPNAME", apn);

**oslist.add(map);**
}

答案 2 :(得分:0)

您将错误的数据传递给适配器,因此您必须更改此行:

ListAdapter adapter = new SimpleAdapter(AppsList.this, oslist, R.layout.activity_apps_list_item, oslist, new int[]{R.id.app_package, R.id.app_name});

另外,我必须提醒您注意有关SimpleAdapter的文档,以便将正确的参数传递给它:

第一个参数是Context,其中与此View相关联的SimpleAdapter正在运行

第二个参数是视图布局的Resource标识符,用于定义此列表项的视图。布局文件应至少包含“to”中定义的那些命名视图。

第三个是将添加到与每个项目相关联的Map的列名列表。

最后一个是应该在“from”参数中显示列的视图。这些都应该是TextViews。此列表中的前N个视图将给出from参数中前N列的值。

然后,修复你的for循环:

for (ApplicationInfo packageInfo : packages) {
    String appkg = packageInfo.packageName;
    String apn = pm.getApplicationLabel(packageInfo).toString();
    map.put("APPPKG", appkg);
    map.put("APPNAME", apn);

oslist.add(map);
}