2017-03-26 4 views
0

ListViewが正確ではないので、複数の選択肢を作成することはできません。どのように問題を解決できるか教えてください。ありがとう!仕事のインストール済みのアンドロイドアプリケーションのリストに「複数の選択肢」をアイコンで追加するには?

例:enter image description here

私はこの結果必要があります。enter image description here

ああ...私はさまざまな方法で問題を解決しようとしたが、私は成功しませんでした。あなたのうちの一人が私に助言を与えることを願っています:)ありがとう!

活性:(MyExample.java)

package com.example.diplom.tester; 

import android.app.ListActivity; 
import android.app.ProgressDialog; 
import android.content.pm.ApplicationInfo; 
import android.content.pm.PackageManager; 
import android.os.AsyncTask; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ListView; 

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

public class MyExample extends ListActivity { 

    private PackageManager packageManager = null; 
    private List<ApplicationInfo> applist = null; 
    private AddAdapter listadapter = null; 



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

     packageManager = getPackageManager(); 
     new LoadApplications().execute(); 
    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     super.onListItemClick(l, v, position, id); 
    } 


    private List<ApplicationInfo> checkForLaunchIntent(List<ApplicationInfo> list){ 
     ArrayList<ApplicationInfo> appList = new ArrayList<ApplicationInfo>(); 
     for(ApplicationInfo info : list){ 
      try{ 
       if(packageManager.getLaunchIntentForPackage(info.packageName) != null){ 
        appList.add(info); 
       } 
      }catch (Exception e){ 
       e.printStackTrace(); 
      } 
     } 
     return appList; 
    } 

    private class LoadApplications extends AsyncTask<Void,Void,Void> { 

     private ProgressDialog progress = null; 
     @Override 
     protected Void doInBackground(Void... voids) { 

      applist = checkForLaunchIntent(packageManager.getInstalledApplications(PackageManager.GET_META_DATA)); 
      listadapter = new AddAdapter(MyExample.this,R.layout.list_item,applist); 
      return null; 
     } 
     @Override 
     protected void onPostExecute(Void aVoid) { 

      setListAdapter(listadapter); 
      progress.dismiss(); 
      super.onPostExecute(aVoid); 
     } 
     @Override 
     protected void onPreExecute() { 
      progress = ProgressDialog.show(MyExample.this,null,"Loading..."); 
      super.onPreExecute(); 
     } 
    } 

} 

AddAdapter.java

package com.example.diplom.tester; 

import android.content.Context; 
import android.content.pm.ApplicationInfo; 
import android.content.pm.PackageManager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.Switch; 
import android.widget.TextView; 

import java.util.List; 

/** 
* Created by 1 on 22.03.2017. 
*/ 
public class AddAdapter extends ArrayAdapter<ApplicationInfo> { 

    private List<ApplicationInfo> appList = null; 
    private Context context; 
    private PackageManager packageManager; 

    public AddAdapter(Context context, int resource, List<ApplicationInfo> objects) { 

     super(context, resource, objects); 
     this.context = context; 
     this.appList = objects; 
     packageManager = context.getPackageManager(); 

    } 

    @Override 
    public int getCount() { 
     return ((null!=appList)? appList.size() : 0); 
    } 

    @Override 
    public ApplicationInfo getItem(int position) { 
     return ((null!=appList)? appList.get(position) : null); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = convertView; 

     if(null==view){ 
      LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
      view = layoutInflater.inflate(R.layout.list_item,null); 
     } 

     ApplicationInfo data = appList.get(position); 

     if(null!=data){ 
      TextView appName = (TextView) view.findViewById(R.id.app_name); 
      ImageView iconView = (ImageView) view.findViewById(R.id.app_icon); 


      appName.setText(data.loadLabel(packageManager)); 
      iconView.setImageDrawable(data.loadIcon(packageManager)); 


     } 
     return view; 
    } 
} 

listItem.xml:

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

    <ImageView 
     android:id="@+id/app_icon" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:padding="3dp" 
     android:scaleType="centerCrop" 
     android:contentDescription="@null"/> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center_vertical" 
     android:orientation="vertical" 
     android:padding="5dp"> 

     <TextView 
      android:id="@+id/app_name" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:gravity="center_vertical" 
      android:textStyle="bold"/> 
    </LinearLayout> 

</LinearLayout> 

activity_my_example.xml:

<?xml version="1.0" encoding="utf-8"?> 
<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" 
    tools:context="com.example.diplom.tester.MyExample"> 

    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@android:id/list" 
     > 

    </ListView> 

</RelativeLayout> 

答えて

0

あなたはほとんどそこにいると思います。 "listItem.xml"を拡張して最後にチェックボックスを表示し、チェックボックスの選択にリスナーを追加して "AddAdapter"クラスを拡張します。イベントを "AddAdapter"からアクティビティに伝播することもできます。

これが役に立ちます。

関連する問題