2016-11-24 5 views
0

Erklärung: Ich habe einen einzigen Dialog. In dem, ich habe listview, wo alle Daten in die Listview gesetzt und in den Dialog zeigen. Ich kann mehrere Werte aus der Listenansicht auswählen und dann auf die Schaltfläche "Anwenden" klicken. Ich habe die Daten mit den ausgewählten Werten erhalten.Wie kann ich mehrere Werte in die Listenansicht auswählen?

Problem

Das Problem ist, wenn ich den Dialog wieder meine vorherige Auswahl öffnen nicht in meinem Code ausgewählt ist.

Was ich will?

Wenn ich den Dialog wieder öffne, bleibt meine vorherige Auswahl im Listenansicht-Element ausgewählt. Wie kann ich das machen?

item_dialog.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="wrap_content" 
    android:background="#333044"> 
    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@+id/ll_btn_actions"> 
     <ListView 
      android:id="@+id/item_list" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 
    </LinearLayout> 
    <LinearLayout 
     android:id="@+id/ll_btn_actions" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true"> 

     <Button 
      android:id="@+id/btn_cancel" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/cancel" 
      android:background="@android:color/transparent" 
      android:textColor="@color/white" 
      android:textSize="@dimen/meet_details_fs" 
      android:gravity="center" 
      android:textAllCaps="false" 
      android:layout_weight="1"/> 
     <Button 
      android:id="@+id/btn_submit" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="@string/apply" 
      android:background="@android:color/transparent" 
      android:textColor="@color/white" 
      android:textSize="@dimen/meet_details_fs" 
      android:gravity="center" 
      android:textAllCaps="false" 
      android:layout_weight="1"/> 
    </LinearLayout> 
</RelativeLayout> 

Wenn ich drücken Sie die Taste, um den Dialog hier offen sein wird, ist der Code der offenen Dialog.

public void setitemDialog(final Activity activity, final List<Brand> compactStoreItemList) { 
     itemDialog = new Dialog(activity); 
     itemDialog.setContentView(R.layout.item_dialog); 
     itemDialog.setCancelable(true); 
     itemDialog.setTitle("Select Brands"); 
     itemDialog.setCanceledOnTouchOutside(true); 

     Button btnSubmit = (Button) itemDialog.findViewById(R.id.btn_submit); 
     Button btnCancel=(Button)itemDialog.findViewById(R.id.btn_cancel); 

     final ListView itemList = (ListView) itemDialog.findViewById(R.id.item_list); 
     final BrandAdapter adapter = new BrandAdapter(activity, compactStoreItemList, prefManager); 
     itemList.setAdapter(adapter); 

     itemList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       adapter.selectItem(position); 
      } 
     }); 
     btnCancel.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (itemDialog.isShowing()) { 
        itemDialog.dismiss(); 
       } 
      } 
     }); 
     btnSubmit.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       brandList = new ArrayList<>(); 
       String brandNames = ""; 
       for (Brand a : adapter.getBox()) { 
        if (a.isChecked) { 
         Log.e(TAG, "BRAND IDS=>" + a.getId()); 
         brandList.add(a); 
//      tempArr.add(a); 
         brandNames += a.getBrandName() + ","; 
        } 
       } 
//    for(Brand b:tempArr){ 
// 
//     brandNames += b.getBrandName() + ","; 
//    } 
       spiBrand.setText(brandNames); 
       if (itemDialog.isShowing()) { 
        itemDialog.dismiss(); 
       } 
      } 
     }); 
     adapter.notifyDataSetChanged(); 
     itemDialog.show(); 
    } 

Unten ist der Adapter, die durch den Dialog aufgerufen und die Werte in die Listenansicht eingestellt.

public class BrandAdapter extends BaseAdapter { 

    public static final String TAG=BrandAdapter.class.getSimpleName(); 

    public Activity activity; 
    private List<Brand> brandList; 
    private LayoutInflater inflater; 
    PreferenceSetting prefManager; 

    public BrandAdapter(Activity activity, List<Brand> brandList, PreferenceSetting preferenceSetting){ 
     this.activity=activity; 
     this.brandList=brandList; 
     prefManager=PreferenceSetting.getInstance(activity); 
     inflater=(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 
     return brandList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return brandList.get(position); 
    } 

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

    public void selectItem(int position){ 
     brandList.get(position).isChecked = !brandList.get(position).isChecked; 
     notifyDataSetChanged(); 
    } 
    public ArrayList<Brand> getBox() { 
     ArrayList<Brand> box = new ArrayList<>(); 
     for (Brand p : brandList) { 
      if (p.isChecked) 
       box.add(p); 
     } 
     return box; 
    } 
    private class Holder{ 
     TextView brandName; 
     CheckBox checkBox; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

     Holder holder; 
     if(convertView==null){ 
      holder=new Holder(); 
      convertView=inflater.inflate(R.layout.ac_problems_list,parent,false); 

      holder.brandName=(TextView)convertView.findViewById(R.id.txt_cooling); 
      holder.checkBox=(CheckBox)convertView.findViewById(R.id.cb_cooling); 

      convertView.setTag(holder); 
     } 
     else{ 
      holder=(Holder)convertView.getTag(); 
     } 

     final Brand brand=brandList.get(position); 
     holder.brandName.setText(brand.getBrandName()); 
//  for(Brand brand1:MeetingActivity.tempArr){ 
//   if(brand.getId()==brand1.getId()){ 
//    holder.checkBox.setChecked(brand1.isChecked); 
//    Log.e(TAG, "IS CHECKED=>" + brand.isChecked); 
//   } 
     holder.checkBox.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       selectItem(position); 
      } 
     }); 
     return convertView; 
    } 
} 

Brand.java

public class Brand { 

    public static final String BRAND_ID="id"; 
    public static final String BRAND_NAME="brand_name"; 
    public static final String USER_ID="user_id"; 
    public static final String DELETE_STATUS="delete_status"; 
    public static final String DISABLE_STATUS="disable_status"; 
    public static final String CREATED_ON="created_on"; 

    private int id; 
    private String brandName; 
    private String userId; 
    private String deleteStatus; 
    private String disableStatus; 
    private String createdOn; 
    public boolean isChecked = false; 

    public Brand(){} 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public String getBrandName() { 
     return brandName; 
    } 

    public void setBrandName(String brandName) { 
     this.brandName = brandName; 
    } 

    public String getUserId() { 
     return userId; 
    } 

    public void setUserId(String userId) { 
     this.userId = userId; 
    } 

    public String getDeleteStatus() { 
     return deleteStatus; 
    } 

    public void setDeleteStatus(String deleteStatus) { 
     this.deleteStatus = deleteStatus; 
    } 

    public String getDisableStatus() { 
     return disableStatus; 
    } 

    public void setDisableStatus(String disableStatus) { 
     this.disableStatus = disableStatus; 
    } 

    public String getCreatedOn() { 
     return createdOn; 
    } 

    public void setCreatedOn(String createdOn) { 
     this.createdOn = createdOn; 
    } 
} 

Wie kann ich das tun ?? Bitte hilf mir.

Antwort

0

In Ihrer getView-Methode sollten Sie auf Ihrem Markenobjekt nach isChecked suchen und dort die Logik implementieren. (Zeigt den richtige Design Zustand nach seinem isChecked Wert)

Ich habe getan, etwas ähnlich wie diese hier:

@Override 
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) { 
     Contract currentContract = mDataset.get(position); 
    if (app.isContractSelected()) { 
       if (currentContract.getContractNr() == app.getSelectedContract().getContractNr()) { 
        contractViewHolder.selector.setVisibility(View.VISIBLE); 
        contractViewHolder.listItem.setBackgroundColor(ContextCompat.getColor(mContext, R.color.veryLightGrey)); 
       } else { 
        contractViewHolder.selector.setVisibility(View.INVISIBLE); 
        TypedValue outValue = new TypedValue(); 
        mContext.getTheme().resolveAttribute(android.R.attr.selectableItemBackground, outValue, true); 
        contractViewHolder.listItem.setBackgroundResource(outValue.resourceId); 
       } 
      }} 
+0

Wenn ich den Dialog wieder öffne, wird mein Adapter aktualisiert, dies ist das Hauptproblem. –

+0

Ja, aber getView() von Ihrem Adapter wird jedes Mal aufgerufen, wenn Sie das Dialogfeld erneut öffnen. Wenn Sie isChecked auf Ihrem Brand-Objekt jedes Mal aktualisieren, wenn Sie es auswählen/abwählen, und seinen Wert in getView lesen, sollten Sie in der Lage sein zu erreichen, was Sie wollen – estoke

+0

Aber wie kann ich erreichen, ich weiß es nicht? –

0

Sie den Zustand der Kontrollkästchen zum Beispiel in SharedPreferences sparen könnte, wenn der Dialog Schließen (vor natürlich) und dann, wenn Ihr Dialog erneut gestartet wird, müssen Sie diese Werte aus den SharedPreferences lesen und dann die Werte in der Initialisierung Ihres Dialogfelds festlegen. Sie können boolesche Werte in die sharedpreferences einfügen und diese dann beim Erstellen des Dialogs erneut auslesen.

Verwandte Themen