извлечение данных с использованием модификации во фрагмент - PullRequest
0 голосов
/ 25 сентября 2018
*holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // transaction to the targeted fragment from current fragment
            AppCompatActivity activity = (AppCompatActivity) view.getContext();
            Fragment myFragment = new open_order();
            activity.getSupportFragmentManager().beginTransaction().replace(R.id.view_order_frag, myFragment).addToBackStack(null).commit();         
        }
    });*

Это код из моего класса адаптера, и я хочу открывать фрагмент всякий раз, когда щелкает элемент, данные во фрагменте должны выбираться в зависимости от того, какой элемент был нажат.

У меня есть вид Recycler, и он содержит список заказов, и предположим, что есть 3 заказа с номером счета.1, 2, 3, соответственно, я хочу открыть заказ по щелчку элемента и извлечь данные во фрагменте для этого элемента, по которому щелкнули, и он должен быть выбран в соответствии с тем счетом или этим элементом, поскольку я использую только один фрагмент для выбранных данных.

Есть предложения?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018
// Create fragment and give it an argument for the selected article

        ArticleFragment newFragment = new ArticleFragment();
        Bundle args = new Bundle();
        // in case your list is of custom objects
        //args.putParcelableArrayList("prgmUri", prgmUri);
        //in case of string arraylist
        //args.putStringArrayList("prgmName", prgmName);
        args.putInt("selected", position);
        newFragment.setArguments(args);

        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

        // Replace whatever is in the fragment_container view with this fragment,
        // and add the transaction to the back stack so the user can navigate back
        transaction.replace(R.id.fragment_container, newFragment);
        transaction.addToBackStack(null);

        // Commit the transaction
        transaction.commit();

Вы можете использовать setArguments() для передачи пакета во фрагмент.

Либо вы можете отправить список в комплекте.

Или

Внутри связки вы можете изменить значение позиции, чтобы оно было разным для фруктов (0) и случайных случаев (1).Получив его по фрагментам, вы можете решить, какой список получить.И используйте список.

Внутри фрагмента: -

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    String strtext = getArguments().getString("key");    
    return inflater.inflate(R.layout.fragment, container, false);
}
0 голосов
/ 25 сентября 2018

Прежде всего вам понадобится широковещательная рассылка, чтобы вы могли отправить информацию о клике из адаптера в ваш фрагмент

1 - CREATE BroadcastHelper CLASS:

 public class BroadcastHelper {
     public static final String BROADCAST_EXTRA_METHOD_NAME = "INPUT_METHOD_CHANGED";
    public static final String ACTION_NAME = "hassan.hossam";
    private static final String UPDATE_LOCATION_METHOD = "updateLocation";


    public static void sendInform(Context context, String method) {
        Intent intent = new Intent();
        intent.setAction(ACTION_NAME);
        intent.putExtra(BROADCAST_EXTRA_METHOD_NAME, method);
        try {
            context.sendBroadcast(intent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void sendInform(Context context, String method, Intent intent) {
        intent.setAction(ACTION_NAME);
        intent.putExtra(BROADCAST_EXTRA_METHOD_NAME, method);
        try {
            context.sendBroadcast(intent);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

2 - Отправить намерение от вашего адаптера

   holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent url = new Intent("url");
            url ("url_adapter",item.get(position).getURL());
            BroadcastHelper.sendInform(context,"url",url);
        }
    });

3- в вашем фрагменте это использование:

 Receiver receiver;
boolean isReciverRegistered = false;


@Override
public void onResume() {
    super.onResume();

    if (receiver == null) {
        receiver = new Receiver();
        IntentFilter filter = new IntentFilter(BroadcastHelper.ACTION_NAME);
        getActivity().registerReceiver(receiver, filter);
        isReciverRegistered = true;
    }
}

@Override
public void onDestroy() {
    if (isReciverRegistered) {
        if (receiver != null)
            getActivity().unregisterReceiver(receiver);
    }
    super.onDestroy();
}


private class Receiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context arg0, Intent arg1) {
        Log.v("r", "receive " + arg1.getStringExtra(BroadcastHelper.BROADCAST_EXTRA_METHOD_NAME));
        String methodName = arg1.getStringExtra(BroadcastHelper.BROADCAST_EXTRA_METHOD_NAME);
        if (methodName != null && methodName.length() > 0) {
            Log.v("receive", methodName);
            switch (methodName) {

                case "url":

                    Toast.makeText(getActivity(), url_adapter , Toast.LENGTH_SHORT).show();
                    break;

                default:
                    break;
            }
        }
    }
}

обратите внимание, что вы можете использовать эту трансляцию для чего угодно, а не только для адаптера, например, вы можете использовать ее для уведомления своей основной активности о новых обновлениях из любой точки вашего приложения.

0 голосов
/ 25 сентября 2018

Если вы отправляете данные активность в фрагмент :

Bundle bundle = new Bundle();
bundle.putString("KEY", "VALUE");
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);    // set Fragmentclass Arguments

во время получения данных в фрагмент :

String str = getArguments().getString("KEY");   
...