У меня есть listvew
с кастамным адаптером, в котором находится Textview
, CheckBox
и кнопка.
Я хочу чтобы при нажатии на imaginbutton imbutUpd
, фрагмент где находится listview
заменился новым фрагментом.
Код BaseAdapter
public class ListViewAdapter extends BaseAdapter {
ArrayList<ListBase> listBases;
Context context;
public ListViewAdapter(Context context, ArrayList<ListBase> araylv){
if(araylv != null){
listBases = araylv;
}
this.context = context;
}
@Override
public int getCount() {
return listBases.size();
}
@Override
public Object getItem(int number) {
return listBases.get(number);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
private DBMethods dbMethods;
CheckBox checkDel;
ImageButton imbutUpd;
BussinesRecrods bussinesRecrods;
MainActivity main;
int isTag;
@Override
public View getView(int id, View convertView, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
ListBase p = getProduct(id);
bussinesRecrods = new BussinesRecrods();
dbMethods = new DBMethods(context);
main = new MainActivity();
if (convertView == null) {
convertView = inflater.inflate(R.layout.tableinfact, parent, false);
}
TextView textVNotBook = (TextView) convertView.findViewById(R.id.textVNotBook);
TextView textTimeDate = (TextView) convertView.findViewById(R.id.textDateTime);
checkDel = (CheckBox) convertView.findViewById(R.id.checkBNotBook);
imbutUpd = (ImageButton) convertView.findViewById(R.id.imageButUpdate);
textVNotBook.setText(listBases.get(id).textHave);
textTimeDate.setText(listBases.get(id).textTime+ " "+listBases.get(id).textDate);
checkDel.setOnCheckedChangeListener(myCheckChangeList);
checkDel.setTag(id);
checkDel.setChecked(p.box);
imbutUpd.setOnClickListener(onClickListener);
imbutUpd.setTag(id);
return convertView;
}
View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
}
};
}
Смена фрагмента должна производиться не в адаптере, а в активности, в которой фрагмент и находится.
Здесь два варианта:
Если у вас адаптер в классе активности, просто вызывайте из активности такую функцию:
void changeFragment(int number) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(idContainer, new MyFragment());
//или
ft.replace(idContainer, MyFragment.newInstance(number));
ft.commit();
}
Если у вас адаптер в отдельном классе, вызывайте эту функцию через interface
в классе адаптера:
ChangeFragment clickOnItem;
interface ChangeFragment{
void changeFragment(int number);
}
public ListViewAdapter(Context context, ArrayList<ListBase> araylv){
if(araylv != null){
listBases = araylv;
}
this.context = context;
clickOnItem = (ClickOnItem) context;
}
Вызывать на клике clickOnItem.changeFragment(id)
, а в активности: MyActivity implements ListViewAdapter.ChangeFragment
и @Override
функцию из варианта №1.
Вообще, сейчас ListView
считается устаревшим и рекомендуется использовать RecyclerView
. Он и правда проще, лучше и функциональней.
Пытаюсь реализовать оценку выстрела по мишениМишень вот такого типа:
Столкнулась с такой проблемой: не могу правильно задать элементам z-index, чтобы всё работало корректноВот тут код
Почему при сначала срабатывает функция UpdateValueMapBalances, а не ReadValueBalances?!
Проблема в том, что html2canvas делает скриншот всего селектора (в данном случа это body), который указанА как сделать так, чтобы был только скриншот...