Подтвердить что ты не робот

Вызвать метод фрагмента из адаптера

У меня есть метод sendData() в моем фрагменте. Этот метод запускает новое действие. Я хочу вызвать этот метод из моего ArrayAdapter.

Вот мой код: -

HomeFragment.java

stagAdaper = new StaggeredAdapter(myContext, android.R.layout.simple_list_item_1, getList);
            mGridView.setAdapter(stagAdaper);
    private void sendData(int position)
    {

        myDialog = new ProgressDialog(myContext).show(getActivity(), "Fetching news..", "Just a moment");

        myDialog.getWindow().setContentView(R.layout.openarticlewaitprogress);
        myDialog.getWindow().setTitle("Loading..");
        myDialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
         new  NewsDetails(myDialog);



            Intent nIntent = new Intent(getActivity(),Details.class);

               String Body=getList.get(position).getBody();

            newsIntent.putExtra("Body", Body);


            startActivity(nIntent);

    }

StaggeredAdapter.java

viewHolder.layGridLayout.setOnClickListener(new View.OnClickListener() 
    {

        @Override
        public void onClick(View v) 
        {
            // TODO Auto-generated method stub
            //viewHolder.layGridLayout.setForeground(R.drawable.foreground_selector);

        }
    });
    return convertView;
    }

Как я могу это сделать?

4b9b3361

Ответ 1

Решение 1: Сделайте адаптер внутренним классом вашего фрагмента, чтобы вы могли напрямую вызвать метод.

Решение 2: Обновите конструктор адаптера, чтобы принять фрагмент в качестве параметра.

Что-то вроде:

customAdapter = new CustomAdapter(myContext, android.R.layout.simple_list_item_1, getList, HomeFragment.this);

и обновите конструктор адаптера:

public CustomAdapter(Context context, int id, HomeFragment fragment) {
    this.fragment = fragment;
}

тогда вы вызываете методы с использованием переменной фрагмента.

fragment.doSomething();

Ответ 2

Я знаю, что поздно ответить, но есть еще два способа сделать это:

  • Вы также можете отправить broadcast из adapter и зарегистрировать его в fragment.

  • Использовать интерфейс. Подробнее см. этот.

Ответ 3

Вы можете сделать метод sendData как статический

public static void sendData(int position)
{
     ......
}

n называть его

@Override
public void onClick(View v) 
{
     // TODO Auto-generated method stub
     HomeFragment.sendData(position)
     ........    
}