2016-05-12 9 views
0

私はアンドロイドが初めてです。私はlistviewのチェックボックスに苦労しています。デフォルトでは、MainActivityからボタンをクリックすると、listviewのチェックボックスを非表示モードにしました。 VISIBLEモードにするにはlistviewのすべてのチェックボックスをオンにしたいが、ボタンをクリックすると他のすべての行のリスト行にVISIBLEしか表示されない。それでもチェックボックスは非表示モードです。mainactivityからボタンをクリックすると、リストビュー内のすべてのチェックボックスが非表示状態にならない

FavouriteListAdapter

public class FavouriteListAdapter extends BaseAdapter { 
private Context mContext; 
private LayoutInflater mInflater; 
ArrayList<FavouritesArray> mArrFavourites; 
ViewHolder viewHolder; 
String favId; 

//Make checkbox to visible in all rows in listview 
public void setcheckbox() { 
    viewHolder.favCheckbox.setVisibility(View.VISIBLE); 
} 

public static class ViewHolder { 
    public TextView favName; 
    public TextView favUrl; 
    public TextView favAddress; 
    public CheckBox favCheckbox; 
} 

public FavouriteListAdapter(Context context, ArrayList<FavouritesArray> lArrFavourites) { 
    mContext = context; 
    mArrFavourites = lArrFavourites; 
} 

@Override 
public int getCount() { 
    if (mArrFavourites == null) { 
     return 0; 
    } 
    return mArrFavourites.size(); 
} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

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

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

    mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) { 
     viewHolder = new ViewHolder(); 
     convertView = mInflater.inflate(R.layout.favouritelistadapter, parent, false); 
     viewHolder.favName = (TextView) convertView.findViewById(R.id.fav_name); 
     viewHolder.favUrl = (TextView) convertView.findViewById(R.id.fav_url); 
     viewHolder.favAddress = (TextView) convertView.findViewById(R.id.fav_address); 
     viewHolder.favCheckbox = (CheckBox) convertView.findViewById(R.id.fav_checkbox); 
     viewHolder.favCheckbox .setVisibility(View.INVISIBLE); 
     convertView.setTag(viewHolder); 

    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    final FavouritesArray chooseService = mArrFavourites.get(position); 
     viewHolder.favName.setText(chooseService.getFavouritename()); 
     viewHolder.favAddress.setText(chooseService.getFavouritelocation()); 

    viewHolder.favCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) { 
       favId = chooseService.getFavouritename(); 
       ((MainActivity) mContext).check(favId); 
      } 
     } 
    }); 
    return convertView; 
}} 
+0

アム構造体は、同様の方法で、私はいくつかのアイデア –

答えて

0

私はあなたがshowCheckBoxブールvaribale が必要だと思うし、それがgetViewメソッド方法状態を確認してください。このサンプルでは
ルック:

ボタンは、あなたのアダプタのadapter.showCheckBoxes(true)を呼び出す必要が活動中でクリックされた
private boolean showCheckBox = false; 

public void showChecBox(boolean show) { 
    showCheckBox = show; 
} 

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

    mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) { 
     viewHolder = new ViewHolder(); 
     convertView = mInflater.inflate(R.layout.favouritelistadapter, parent, false); 
     viewHolder.favName = (TextView) convertView.findViewById(R.id.fav_name); 
     viewHolder.favUrl = (TextView) convertView.findViewById(R.id.fav_url); 
     viewHolder.favAddress = (TextView) convertView.findViewById(R.id.fav_address); 
     viewHolder.favCheckbox = (CheckBox) convertView.findViewById(R.id.fav_checkbox); 
     convertView.setTag(viewHolder); 

    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    final FavouritesArray chooseService = mArrFavourites.get(position); 
    viewHolder.favName.setText(chooseService.getFavouritename()); 
    viewHolder.favAddress.setText(chooseService.getFavouritelocation()); 
    int checkBoxVisibility = showCheckBox : View.VISIBLE ? View.INVISIBLE; 
    viewHolder.favCheckbox.setVisibility(checkBoxVisibility); 

    viewHolder.favCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) { 
       favId = chooseService.getFavouritename(); 
       ((MainActivity) mContext).check(favId); 
      } 
     } 
    }); 
    return convertView; 
}} 
+0

おかげでアレクサンダーその作業をお願いし、いくつかの助けを必要とする方法であることを、すべてのチェックボックスを作る方法を教えてくださいinvisibeモードでもう一度 –

+0

** showChecBox(false)**とそれ以降** notifyDataSetChanged()**を呼び出す必要があります。このメソッドは、ボタンのクリックリスナーから呼び出されます。 – Alexander

0

。その機能でフィールドをshowCheckBoxes=true;に設定し、notifyDataSetChanged()を使用してリストを更新すると、すべての行に対してgetViewメソッドが呼び出されます。 getViewでshowCheckBoxesがtrueであるかどうかをチェックし、それに応じてチェックボックスを表示します。あなたのボタンのクリック機能で

public class FavouriteListAdapter extends BaseAdapter { 
private Context mContext; 
private LayoutInflater mInflater; 
ArrayList<FavouritesArray> mArrFavourites; 
ViewHolder viewHolder; 
String favId; 
boolean showCheckBoxes = false; 
//Make checkbox to visible in all rows in listview 
public void setcheckbox() { 
    viewHolder.favCheckbox.setVisibility(View.VISIBLE); 
} 

public static class ViewHolder { 
    public TextView favName; 
    public TextView favUrl; 
    public TextView favAddress; 
    public CheckBox favCheckbox; 
} 

public FavouriteListAdapter(Context context, ArrayList<FavouritesArray> lArrFavourites) { 
    mContext = context; 
    mArrFavourites = lArrFavourites; 
} 

@Override 
public int getCount() { 
    if (mArrFavourites == null) { 
     return 0; 
    } 
    return mArrFavourites.size(); 
} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

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

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

    mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    if (convertView == null) { 
     viewHolder = new ViewHolder(); 
     convertView = mInflater.inflate(R.layout.favouritelistadapter, parent, false); 
     viewHolder.favName = (TextView) convertView.findViewById(R.id.fav_name); 
     viewHolder.favUrl = (TextView) convertView.findViewById(R.id.fav_url); 
     viewHolder.favAddress = (TextView) convertView.findViewById(R.id.fav_address); 
     viewHolder.favCheckbox = (CheckBox) convertView.findViewById(R.id.fav_checkbox); 
     viewHolder.favCheckbox .setVisibility(View.INVISIBLE); 
     convertView.setTag(viewHolder); 

    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    final FavouritesArray chooseService = mArrFavourites.get(position); 
     viewHolder.favName.setText(chooseService.getFavouritename()); 
     viewHolder.favAddress.setText(chooseService.getFavouritelocation()); 
if(showCheckBoxes){ 
viewHolder.favCheckbox .setVisibility(VISIBLE); 
}else{ 
viewHolder.favCheckbox .setVisibility(INVISIBLE); 
} 
    viewHolder.favCheckbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) { 
       favId = chooseService.getFavouritename(); 
       ((MainActivity) mContext).check(favId); 
      } 
     } 
    }); 
    return convertView; 
}} 

public void showCheckBoxes(boolean showCheckBoxes){ 
this.showCheckBoxes=showCheckBoxes; 
notifyDataSetChanged(); 
} 

は:ここ

void onClick(View v){ 
    mAdapter.showCheckBoxes(true); 
} 
関連する問題