Как установить селектор listView по фрагментам? - PullRequest
0 голосов
/ 07 октября 2019

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

Я пытаюсь просмотреть .setSelector (true), но это не работает. Есть ли другой способ установить селектор списка просмотра, когда нажата кнопка этого фрагмента и выбран элемент списка во фрагменте. Извините за мой плохой английский и описание. Большое спасибо за любую помощь от вас.

MainActivity.java

public class MainActivity extends AppCompatActivity {

    FragmentTransaction ft;
    FragmentBlue blueFragment;
    FragmentRed redFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ft = getSupportFragmentManager().beginTransaction();
        blueFragment = FragmentBlue.newInstance("Students List");
        ft.replace(R.id.main_holder_blue, blueFragment);
        ft.commit();

        ft = getSupportFragmentManager().beginTransaction();
        redFragment = FragmentRed.newInstance("Student ID");
        ft.replace(R.id.main_holder_red, redFragment);
        ft.commit();
    }

    public void onMsgFromFragToMain(String sender, String strValue, int position) {
        //Toast.makeText(getApplication(), strValue, Toast.LENGTH_LONG) .show();
        if (sender.equals("RED-FRAG")) {
            // TODO: if needed, do here something on behalf of the RED
            try {
                blueFragment.onMsgFromMainToFragment(position); // ?????
              //  blueFragment.getViewByPosition(position, blueFragment.list).setSelected(true);
            } catch (Exception e){
                Log.e("ERROR", "Fail to deliver message from Main to Fragment");
            }
        }
        if (sender.equals("BLUE-FRAG")) {
            try {
                redFragment.onMsgFromMainToFragment(strValue, position);

            } catch (Exception e) {
                Log.e("ERROR", "Fail to deliver message from Main to Fragment");
            }
        }
    }
}

фрагментBlue.java

public class FragmentBlue extends Fragment {

    MainActivity main;
    Context context = null;
    ListView list;
    TextView txtBlue;
    private String[] items = {}
    public static FragmentBlue newInstance(String strArg) {
        FragmentBlue fragment = new FragmentBlue();
        Bundle args = new Bundle();
        args.putString("strArg1", strArg);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
            context = getActivity();
            main = (MainActivity) getActivity();
        } catch (IllegalStateException e) {
            throw new IllegalStateException("MainActivity must implement callbacks");
        }
    }

    public View getViewByPosition(int pos, ListView listView) {
        final int firstListItemPosition = listView.getFirstVisiblePosition();
        final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;

        if (pos < firstListItemPosition || pos > lastListItemPosition ) {
            return listView.getAdapter().getView(pos, null, listView);
        } else {
            final int childIndex = pos - firstListItemPosition;
            return listView.getChildAt(childIndex);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        LinearLayout view_layout_blue = (LinearLayout) inflater.inflate(R.layout.layout_blue, null);
        txtBlue = view_layout_blue.findViewById(R.id.textView2);
        list = view_layout_blue.findViewById(R.id.listView);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, items);
        list.setAdapter(adapter);

        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                main.onMsgFromFragToMain("BLUE-FRAG", items[position], position);
                txtBlue.setText("Student ID: " + items[position]);
                v.setSelected(true);
            }
        });
        return view_layout_blue;
    }


    public void onMsgFromMainToFragment(final int pos) {
        txtBlue.setText("Student ID: " + items[pos]);
        getViewByPosition(pos, list).setSelected(true);
        main.onMsgFromFragToMain("BLUE-FRAG", items[pos], pos);

    }
}

FragmentRed.java

 btnFirst = view_layout_red.findViewById(R.id.button);
        btnPre = view_layout_red.findViewById(R.id.button2);
        btnNext = view_layout_red.findViewById(R.id.button3);
        btnLast = view_layout_red.findViewById(R.id.button4);

        btnFirst.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                main.onMsgFromFragToMain("RED-FRAG", "", 0);
                //txtRed.setText("POS NOW: " + pos_now);
            }
        });

        btnPre.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (pos_now > 0) {
                    main.onMsgFromFragToMain("RED-FRAG", "", pos_now - 1);
                }
            }
        });

        btnNext.setOnClickListener(new View.OnClickListener() {
            @Override
        public void onClick(View v) {

                if (pos_now < 14)
                    main.onMsgFromFragToMain("RED-FRAG", "", pos_now + 1);
            }
        });

        btnLast.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                main.onMsgFromFragToMain("RED-FRAG", "", 14);
            }
        });
...