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