2017-07-21 1 views
0

Ich habe eine App, die Listview mit Switch-Compat enthalten, die in Listview-Adapter definieren. Was ich aktivieren/deaktivieren möchte, wende eine Methode in Aktivität, die Listview enthält. Wie mache ich das.Wie man toggle auf denen in listview Adapter von Aktivität in Android definieren?

Code des Adapters: -

listViewHolder.switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(final CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) { 
       new AlertDialog.Builder(mContext, R.style.AppCompatAlertDialogStyle).setTitle("Warning").setMessage("You want to whiteList this application?").setPositiveButton("YES", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 

         //retrieve data from shared preference 
         String jsonScore = sharedPreference.getAppsArrayListData(); 
         Type type = new TypeToken<ArrayList<WhiteListModel>>() { 
         }.getType(); 
         existingDataSet = gson.fromJson(jsonScore, type); 

         //Adding items in Dataset 
         AllAppList appList = listStorage.get(position); 
         whiteListModel.setName(appList.getName()); 
         whiteListModel.setPackName(appList.getPackName()); 


         if (existingDataSet != null) { 
          existingDataSet.add(whiteListModel); 
          saveScoreListToSharedpreference(existingDataSet); 
         } else { 
          newDataSet.add(whiteListModel); 
          saveScoreListToSharedpreference(newDataSet); 
         } 

         //Notifying adapter data has been changed..... 
         notifyDataSetChanged(); 
         listViewHolder.switchCompat.setChecked(false); 


        } 
       }).setNegativeButton("No", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         listViewHolder.switchCompat.setChecked(false); 
        } 
       }).show(); 

      } 

     } 
    }); 

Code Listenansicht klicken: -

private List<AllAppList> getInstalledApps() { 
    List<AllAppList> res = new ArrayList<AllAppList>(); 
    List<PackageInfo> packs = getPackageManager().getInstalledPackages(0); 
    for (int i = 0; i < packs.size(); i++) { 
     PackageInfo p = packs.get(i); 
     if ((!isSystemPackage(p))) { 
      if (p.applicationInfo.packageName.equalsIgnoreCase("com.soopermo.batterybooster")){ 
       continue; 
      } 
      boolean isWhiteList = false; 
      if (whiteListModels != null) { 
       for (int j = 0; j < whiteListModels.size(); j++) { 
        model = whiteListModels.get(j); 
        Log.e(TAG, "p*****" + model.getPackName()); 
        if (p.applicationInfo.packageName.equalsIgnoreCase(model.getPackName())) { 
         // This package is whitlist package 
         isWhiteList = true; 
         //Here is want to enable/disable switch 

        } 
       } 
      } 
+0

Was ich von deiner Frage verstanden habe ist: du hast ein listView welches itemView als textView und einen switch hat Bei Änderung des Schalters in Ihrer Listenansicht möchten Sie diese Änderung in Ihrer Aktivität widerspiegeln. d. h. Sie ändern etwas in Ihrem Artikel im Adapter, es sollte diese Änderung an Aktivität melden, an die der Adapter angeschlossen ist .. Ist das so? – Ashwani

+0

Nein Ich möchte den Switch-Status von einer Methode ändern, die sich in einer Aktivität befindet. – Raghav

+0

swicth ist in der Adapterklasse – Raghav

Antwort

0

es über eine Modellklasse tun.

Item.java

public class Item{ 
    private String appName; 
    private boolean isEnable; 
    public String getAppName(){ 
     return this.appName; 
    } 
    public void setAppName(String name){ 
     this.appName = name; 
    } 
    public boolean isEnabled(){ 
     return this.isEnabled; 
    } 
    public void setEnabled(boolean value){ 
     this.isEnabled = value; 
    } 
} 

MainActivity.java

List<Item> myItems = new ArrayList<>(); 
... 
..onCreate(Bundle savedInstance){ 
...//your code 
YourAdapter adapter = new YourAdapter(MainActivity.this, myItems);//pass the list of items. 
yourListView.setAdapter(adapter); 

//your action call when you want to trigger the change suppose 2nd item has to be enabled. 
myItems.get(1).setEnabled(true); 

//and after that notify this change to your adapter 
adapter.notifyDataSetChanged(); 

} 

YourAdapter.java

List<Items> itemList; 
Context context; 

public YourAdapter(Context context, List<Items> itemList){ 
    this.context = context; 
    this. itemList = itemList; 
} 

public View getView(int position, View convertView, ViewGroup parent){ 
    ...//you code to inflate your view 
    Items item = itemList.get(position); 

    if(item.isEnabled()){ 
     //toggle your switch. 
    } 

} 

mein Item.java ist Wie bei AllApplist.java, setze einfach einen booleschen Wert hinein und mache es so, wie es im Code gemacht wird.

Verwandte Themen