In onAttach() Methode Communicator = (Communicator) Aktivität gibt null zurück. Wenn ich auf die Image View klicke, zeigt es den Wert communicatior ist null. Ich habe überprüfen, aber nicht in der Lage, das Problem zu lösen. Hier im Fragment beim Klicken auf die Bildansicht sollten einige Daten in die Aktivität übernommen werden. Aber die Bezugsgröße der Schnittstelle Commnunicator Communicator erhält den Nullwert in onAttch()Schnittstelle innerhalb des Fragments gibt Nullwert zurück
public class SendFragment extends Fragment {
ImageView imgContact;
TextView tvContactName;
String username;
Communicator communicator;
public interface Communicator {
public void sendDataToActivity(String s);
}
public static final String TAG = SendFragment.class.getSimpleName();
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof Communicator) {
communicator = (Communicator) context;
} else {
throw new IllegalArgumentException(
"Must implement " + TAG + ".Communicator on caller Activity");
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_send, container, false);
imgContact = (ImageView) view.findViewById(R.id.contactbook);
tvContactName = (TextView) view.findViewById(R.id.tvcontactname);
if(!TextUtils.isEmpty(username)) {
username = getArguments().getString("username").toString();
tvContactName.setText(username);
}
listeners();
return view;
}
private void listeners() {
imgContact.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
communicator.sendDataToActivity(Constants.selectUserName);
Intent intent = new Intent(getActivity(), AllContactsListActivity.class);
startActivity(intent);
}
});
}
}
Nun ist die unten ist mein Code der Aktivität ..
public class AllContactsListActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, SendFragment.Communicator,RecyclerViewAdapter.OnItemClick {
Context context;
RecyclerView recyclerView;
RecyclerView.Adapter recyclerViewAdapter;
RecyclerView.LayoutManager recylerViewLayoutManager;
ImageButton btnSliding_common;
DrawerLayout drawer;
NavigationView navigationView;
String sendFragmentStringFlag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_all_contacts_list);
setIds();
listeners();
}
private void listeners() {
recyclerViewAdapter = new RecyclerViewAdapter(AllContactsListActivity.this, subjects, emails, address,this);
recyclerView.setAdapter(recyclerViewAdapter);
RecyclerView.ItemDecoration itemDecoration =
new DividerItemDecoration(this, LinearLayoutManager.VERTICAL);
recyclerView.addItemDecoration(itemDecoration);
btnSliding_common.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
drawer.openDrawer(GravityCompat.END);
}
});
}
private void setIds() {
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
btnSliding_common = (ImageButton) findViewById(R.id.btnSliding_contact);
drawer = (DrawerLayout) findViewById(R.id.drawer_layout_contact);
navigationView = (NavigationView) findViewById(R.id.nav_view_contact);
recylerViewLayoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(recylerViewLayoutManager);
}
@Override
public void sendDataToActivity(String sendMoneyflag) {
sendFragmentStringFlag=sendMoneyflag;
}
@Override
public void onClick(String username) {
if(!TextUtils.isEmpty(sendFragmentStringFlag)) {
if (sendFragmentStringFlag.equals(Constants.selectUserName)) {
Toast.makeText(this, "You clicked " + username, Toast.LENGTH_SHORT).show();
Bundle bundle = new Bundle();
bundle.putString("username", username);
SendFragment sendFragment = new SendFragment();
sendFragment.setArguments(bundle);
finish();
}
}else{
Toast.makeText(this, "USER NAME" + username, Toast.LENGTH_SHORT).show();
}
}
}
nach dem Code der Umsetzung wird Ausnahme wie zeigt „java.lang.IllegalArgumentException: Muss SendFragment.Communicator auf Anrufer Aktivität implementieren“ .. –
, dass ein korrektes Verhalten ist. Dies bedeutet, dass Sie die Schnittstelle nicht in Ihrer Host-Aktivität implementiert haben. Ihre Aktivitätsklasse sollte folgendermaßen definiert sein: 'public class YourActivity extends Activity implementiert YouFragment.Communicator {}' –
Ich habe das bereits implementiert. Aber ich bekomme die selbe Ausnahme. ** "öffentliche Klasse AllContactsListActivity erweitert AppCompatActivity implementiert NavigationView.OnNavigationItemSelectedListener, SendFragment.Communicator, RecyclerViewAdapter.OnItemClick **" –