Переход из одного фрагмента в другой при нажатии на кнопку в listview

175
11 июля 2018, 17:20

У меня есть 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) {

    }
};
}
Answer 1

Смена фрагмента должна производиться не в адаптере, а в активности, в которой фрагмент и находится.

Здесь два варианта:

  1. Если у вас адаптер в классе активности, просто вызывайте из активности такую функцию:

    void changeFragment(int number) {
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(idContainer, new MyFragment());
        //или
        ft.replace(idContainer, MyFragment.newInstance(number));
        ft.commit();
    }
    
  2. Если у вас адаптер в отдельном классе, вызывайте эту функцию через 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. Он и правда проще, лучше и функциональней.

READ ALSO
Оценка выстрела по мишени (Java, Android)

Оценка выстрела по мишени (Java, Android)

Пытаюсь реализовать оценку выстрела по мишениМишень вот такого типа:

184
Кoрректная работа z-index

Кoрректная работа z-index

Столкнулась с такой проблемой: не могу правильно задать элементам z-index, чтобы всё работало корректноВот тут код

227
JavaScript. Асинхронные функции. Что я делаю не так?

JavaScript. Асинхронные функции. Что я делаю не так?

Почему при сначала срабатывает функция UpdateValueMapBalances, а не ReadValueBalances?!

177
скриншот экрана с html2canvas

скриншот экрана с html2canvas

Проблема в том, что html2canvas делает скриншот всего селектора (в данном случа это body), который указанА как сделать так, чтобы был только скриншот...

195