2017-05-08 20 views
-2

カスタムリストビューから複数のアイテムを選択し、別の リストビューに渡します。アプリケーションを閉じると、選択したアイテムがきれいになっています。baseadaptorからアクティビティへ共有設定値を取得する方法

私は共有プリファレンスを使用している、私はデータ> MainActivity

を取得することができませんでしMainActivity.java

public class MainActivity extends Activity { 
private Button bt_inst_app; 
GridView gridView, gv_shortcut; 
List<AppList> installedApps; 
List<AppList> res = new ArrayList<AppList>(); 
private String appName, appPackageName; 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_layout); 
    gv_shortcut = (GridView) findViewById(R.id.gv_shortcut); 
    bt_inst_app = (Button) findViewById(R.id.bt_inst_app); 
    bt_inst_app.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      AlertDialog.Builder quick_links_alert = new AlertDialog.Builder(MainActivity.this); 
      quick_links_alert.setTitle("Edit Quick Links"); 
      LinearLayout quick_links_layout = new LinearLayout(MainActivity.this); 
      quick_links_layout.setOrientation(LinearLayout.VERTICAL); 
      LinearLayout.LayoutParams quick_links_layoutparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
      quick_links_layoutparams.setMargins(20, 0, 30, 0); 
      gridView = new GridView(MainActivity.this); 
      installedApps = getInstalledApps(); 
      final GridViewAdapter gridViewAdapter = new GridViewAdapter(MainActivity.this, installedApps); 
      gridView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
      gridView.setAdapter(gridViewAdapter); 
      gridView.setNumColumns(5); 
      quick_links_alert.setView(gridView); 
      quick_links_alert.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
        final List<AppList> mArrayProducts = gridViewAdapter.getCheckedItems(); 
        final QuickLinksGridViewAdaptor selected_apps = new QuickLinksGridViewAdaptor(MainActivity.this, mArrayProducts); 
        gv_shortcut.setAdapter(selected_apps); 
        gv_shortcut.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
         @Override 
         public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
          String s = mArrayProducts.get(position).getPackageName(); 
          Intent PackageManagerIntent = getPackageManager().getLaunchIntentForPackage(s);//Here some time getting NULL 
          startActivity(PackageManagerIntent); 
         } 
        }); 
       } 
      }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int whichButton) { 
       } 
      }); 
      quick_links_alert.show(); 

     } 

     private List<AppList> getInstalledApps() { 
      List<PackageInfo> packs = getPackageManager().getInstalledPackages(0); 
      for (int i = 0; i < packs.size(); i++) { 
       PackageInfo p = packs.get(i); 
       //if ((isSystemPackage(p) == false)) { 
       if (((p.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) != true) { 
        appName = p.applicationInfo.loadLabel(getPackageManager()).toString(); 
        Drawable icon = p.applicationInfo.loadIcon(getPackageManager()); 
        appPackageName = p.applicationInfo.packageName; 
        res.add(new AppList(icon, appName, appPackageName)); 
       } 
      } 
      return res; 
     } 
    }); 
} 
} 

GridViewAdapter.java

public class GridViewAdapter<T> extends BaseAdapter { 
Context mContext; 
//private final int length = 9;*/ 
private LayoutInflater layoutInflater; 
List<AppList> listStorage; 
MainActivity homeactivity; 
private int selectedIndex; 
private int selectedColor = Color.parseColor("#1b1b1b"); 
SparseBooleanArray mSparseBooleanArray; 
SharedPreferences settings; 
public GridViewAdapter(Context context, List<AppList> customizedListView) { 
    layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    this.mContext = context; 
    listStorage = customizedListView; 
    mSparseBooleanArray = new SparseBooleanArray(); 
} 
public void setSelectedIndex(int ind) { 
    selectedIndex = ind; 
    notifyDataSetChanged(); 
} 
public ArrayList<T> getCheckedItems() { 
    ArrayList<T> mTempArry = new ArrayList<T>(); 
    for (int i = 0; i < listStorage.size(); i++) { 
     if (mSparseBooleanArray.get(i)) { 
      mTempArry.add((T) listStorage.get(i)); 
     } 
    } 
    return mTempArry; 
} 
@Override 
public int getCount() { 
    return listStorage.size(); 
} 
public Object getItem(int position) { 
    return listStorage.get(position); 
} 
@Override 
public long getItemId(int position) { 
    return 0; 
} 
@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    final ViewHolder listViewHolder; 
    if (convertView == null) { 
     listViewHolder = new ViewHolder(); 
     LayoutInflater vi = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = vi.inflate(R.layout.add_apps_grid_item, parent, false); 
     listViewHolder.textInListView = (TextView) convertView.findViewById(R.id.item_name); 
     listViewHolder.imageInListView = (ImageView) convertView.findViewById(R.id.item_type); 
     listViewHolder.tvPkgName = (TextView) convertView.findViewById(R.id.tvPack); 
     listViewHolder.select_app = (CheckBox) convertView.findViewById(R.id.select_app); 
     convertView.setTag(listViewHolder); 
    } else { 
     listViewHolder = (ViewHolder) convertView.getTag(); 
    } 
    listViewHolder.textInListView.setText(listStorage.get(position).getName()); 
    listViewHolder.imageInListView.setImageDrawable(listStorage.get(position).getIcon()); 
    listViewHolder.tvPkgName.setText(listStorage.get(position).getPackageName()); 
    listViewHolder.select_app.setTag(position); 
    listViewHolder.select_app.setChecked(mSparseBooleanArray.get(position)); 
    final AppList item = listStorage.get(position); 
    listViewHolder.textInListView.setText(item.getName()); 
    SharedPreferences settings = mContext.getSharedPreferences("data", Context.MODE_PRIVATE); 
    boolean Checked = settings.getBoolean(item.getName(), false); 
    listViewHolder.select_app.setChecked(Checked); 
    listViewHolder.select_app.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      Toast.makeText(mContext, "pkg name==" + listStorage.get(position).getPackageName(), Toast.LENGTH_LONG).show(); 
      if (listViewHolder.select_app.isChecked() == true) { 
       SharedPreferences settings = mContext.getSharedPreferences("data", Context.MODE_PRIVATE); 
       // Toast.makeText(mContext, "You deselected " + Context.MODE_PRIVATE, Toast.LENGTH_SHORT).show(); 
       mSparseBooleanArray.put((Integer) buttonView.getTag(), settings.edit().putBoolean(item.getName(), true).commit()); 
       // Toast.makeText(mContext, "You selected " + item.getName(), Toast.LENGTH_SHORT).show(); 
      } else { 
       SharedPreferences settings = mContext.getSharedPreferences("data", Context.MODE_PRIVATE); 
       mSparseBooleanArray.put((Integer) buttonView.getTag(), settings.edit().putBoolean(item.getName(), false).commit()); 
       // Toast.makeText(mContext, "You deselected " + item.getName(), Toast.LENGTH_SHORT).show(); 
      } 
      // Toast.makeText(mContext, "Shared prefernce---->" + mContext.toString(), Toast.LENGTH_SHORT).show(); 

     } 
    }); 

    return convertView; 
} 
OnCheckedChangeListener mCheckedChangeListener = new OnCheckedChangeListener() { 

    @Override 
    public void onCheckedChanged(CompoundButton buttonView, 
           boolean isChecked) { 
     mSparseBooleanArray.put((Integer) buttonView.getTag(), isChecked); 
    } 

}; 
static class ViewHolder { 
    TextView textInListView, tvPkgName; 
    ImageView imageInListView; 
    CheckBox select_app; 
} 
} 
あなたが活動中のデータを保存し、取得するためにsavedInstanceStateメソッドを使用するか、またはあなたがすべてのブールチェック値を保存することができます0

AppList.java

public class AppList implements Parcelable { 
private String name; 
private String packageName; 
Drawable icon; 
private boolean selected; 

public AppList(Drawable icon, String name, String packageName) { 
    this.name = name; 
    this.icon = icon; 
    this.packageName = packageName; 
} 
protected AppList(Parcel in) { 
    name = in.readString(); 
    packageName = in.readString(); 
    selected = in.readByte() != 0; 
} 
public static final Creator<AppList> CREATOR = new Creator<AppList>() { 
    @Override 
    public AppList createFromParcel(Parcel in) { 
     return new AppList(in); 
    } 

    @Override 
    public AppList[] newArray(int size) { 
     return new AppList[size]; 
    } 
}; 
public String getName() { 
    return name; 
} 
public String getPackageName() { 
    return packageName; 
} 
public Drawable getIcon() { 
    return icon; 
} 
public String toString() { 
    return name; 
} 
@Override 
public int describeContents() { 
    return 0; 
} 
@Override 
public void writeToParcel(Parcel parcel, int i) { 
    parcel.writeString(name); 
    parcel.writeString(packageName); 
    parcel.writeByte((byte) (selected ? 1 : 0)); 
} 
public boolean isSelected() { 
    return selected; 
} 
public void setSelected(boolean selected) { 
    this.selected = selected; 
} 
} 

QuickLinksGridViewAdaptor.java

public class QuickLinksGridViewAdaptor<T> extends BaseAdapter { 
private Context context; 
//private final int length = 9;*/ 
private LayoutInflater layoutInflater; 
List<AppList> listStorage; 
MainActivity homeactivity; 
private int selectedIndex; 
SparseBooleanArray mSparseBooleanArray; 
int num = 1; 
public QuickLinksGridViewAdaptor(Context context, List<AppList> customizedListView) { 
    layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    listStorage = customizedListView; 
    mSparseBooleanArray = new SparseBooleanArray(); 
} 
public void setSelectedIndex(int ind) { 
    selectedIndex = ind; 
    notifyDataSetChanged(); 
} 
public ArrayList<T> getCheckedItems() { 
    ArrayList<T> mTempArry = new ArrayList<T>(); 
    for (int i = 0; i < listStorage.size(); i++) { 
     if (mSparseBooleanArray.get(i)) { 
      mTempArry.add((T) listStorage.get(i)); 
     } 
    } 
    return mTempArry; 
} 
@Override 
public int getCount() { 
    //return 8; 
    if(num*8 >= listStorage.size()){ 
     return listStorage.size(); 
    }else{ 
     return num*8; 
    } 
} 
public Object getItem(int position) { 
    return listStorage.get(position); 
} 
@Override 
public long getItemId(int position) { 
    return 0; 
} 
@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    ViewHolder listViewHolder; 
    if (convertView == null) { 
     listViewHolder = new ViewHolder(); 
     convertView = layoutInflater.inflate(R.layout.add_apps_grid_item1, parent, false); 
     listViewHolder.textInListView = (TextView) convertView.findViewById(R.id.item_name1); 
     listViewHolder.imageInListView = (ImageView) convertView.findViewById(R.id.item_type1); 
     convertView.setTag(listViewHolder); 

    } else { 
     listViewHolder = (ViewHolder) convertView.getTag(); 
    } 
    listViewHolder.textInListView.setText(listStorage.get(position).getName()); 
    listViewHolder.imageInListView.setImageDrawable(listStorage.get(position).getIcon()); 
    return convertView; 
} 
static class ViewHolder { 
    TextView textInListView; 
    ImageView imageInListView; 
} 
    } 
+0

sharedPreferenceにはどこにデータを保存しましたか?私はあなたのコードを通過したが、保存していないsharedPrefからのデータにしかアクセスできないことがわかった。 –

+0

Gridviewアダプタ "mContext.getSharedPreferences(" data " – Narendra

+0

共有優先データベースアダプタをアクティビティ – Narendra

答えて

0

選択する値の名前/ IDとしてkeyを使用し、trueまたはfalseを使用して、選択した値(選択状態または非選択状態のいずれか)をSharedPreferencesに変更します。

共有設定を簡単に確認して、共有設定にこの値が存在するかどうかを簡単に確認できます。ブール値を使用して選択を表示します。

あなたはこの回答を得ることを願っています。

+0

にどのように取得するのか分かります。true/falseでチェックします。ベースadaptor.Iでデータを取得しています。共有環境設定データベースアダプタ – Narendra

+0

アダプタで渡されたアクティビティのコンテキストを使用して取得することができます –

+0

私はアンドロイドに新しいです...私はNullを取得していますが、それはaccasteting Toast.makeText(MainActivity.this、 "Shared Pref- - > "+ selected_apps.mContext、Toast.LENGTH_LONG).SHOW(); は、私はあなたがMainActivityクラスで必要な場所にコンテキストとしてMainActivity.thisを渡すことでSharedPreferencesにアクセスすることができ、私は正しい道?? – Narendra

関連する問題