Search code examples
javaandroidandroid-activityinterfaceandroid-fragmentactivity

Activity send data to Fragment with interface


I want to activity send fragment.enter image description here I have a error you see below photo. Activity to fragment data send. i want to do when listView onClick my fragment that il value temp data. Fragment want to see humidity value ,temp value when setOnItemClickListener

MainActivity.java

public class MainActivity extends AppCompatActivity {
private String text ;
private TextView textView, textView2,textView3,textView4;
private SearchView searchView;
private ListView listView ;
private String[] il={"Adana", "Adıyaman", "Afyon", "Ağrı", "Amasya", "Ankara", "Antalya", "Artvin",
        "Aydın", "Balıkesir", "Bilecik", "Bingöl", "Bitlis", "Bolu", "Burdur", "Bursa", "Çanakkale",
        "Çankırı", "Çorum", "Denizli", "Diyarbakır", "Edirne", "Elazığ", "Erzincan", "Erzurum", "Eskişehir",
        "Gaziantep", "Giresun", "Gümüşhane", "Hakkari", "Hatay", "Isparta", "Mersin", "İstanbul", "İzmir",
        "Kars", "Kastamonu", "Kayseri", "Kırklareli", "Kırşehir", "Kocaeli", "Konya", "Kütahya", "Malatya",
        "Manisa", "Kahramanmaraş", "Mardin", "Muğla", "Muş", "Nevşehir", "Niğde", "Ordu", "Rize", "Sakarya",
        "Samsun", "Siirt", "Sinop", "Sivas", "Tekirdağ", "Tokat", "Trabzon", "Tunceli", "Şanlıurfa", "Uşak",
        "Van", "Yozgat", "Zonguldak", "Aksaray", "Bayburt", "Karaman", "Kırıkkale", "Batman", "Şırnak",
        "Bartın", "Ardahan", "Iğdır", "Yalova", "Karabük", "Kilis", "Osmaniye", "Düzce"};
private ArrayAdapter<String> arrayAdapter;

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


    searchView= (SearchView) findViewById(R.id.searchView);
    listView= (ListView) findViewById(R.id.listView);

    final SendData sendData = (SendData) this;
    FragmentA fragmentA = new FragmentA() ;
    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction transaction = fragmentManager.beginTransaction();
    transaction.add(R.id.frameLayout,fragmentA,"fragA");
    transaction.commit();




    arrayAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,android.R.id.text1,il);
    listView.setAdapter(arrayAdapter);
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextSubmit(String query) {
            return false;
        }

        @Override
        public boolean onQueryTextChange(String newText) {
            arrayAdapter.getFilter().filter(newText);
            return false;
        }
    });


    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, final int position, long id) {
            text = (String) listView.getItemAtPosition(position);
            sendData.gonder(text);

        }
    });





}

}

FragmentA.java

public class FragmentA extends Fragment implements SendData {
private TextView textView, textView2,textView3,textView4;

View view ;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    view = inflater.inflate(R.layout.fragment_a,container,false) ;

    textView4= (TextView) view. findViewById(R.id.textIsım);
    textView3= (TextView) view.findViewById(R.id.textView3);
    textView2= (TextView) view.findViewById(R.id.textView2);
    textView= (TextView) view. findViewById(R.id.textView);
    return view;
}

@Override
public void gonder(String isim) {
    Factory.getInstance().havaModel(isim,APPID_KEY).enqueue(new Callback<HavaModel>() {
        @Override
        public void onResponse(Call<HavaModel> call, Response<HavaModel> response) {
            textView.setText(Float.toString((float) (response.body().main.temp-273.15)));
            textView2.setText(Float.toString(response.body().coord.lon));
            textView3.setText(Integer.toString(response.body().main.humidity)+" %");
            textView4.setText(response.body().name);

        }

        @Override
        public void onFailure(Call<HavaModel> call, Throwable t) {

        }
    });
}

SendData.java

public interface SendData {
public void gonder(String isim) ;
 }

Thank you very much Your advice important for me I hope you will help me


Solution

  • You have to set your Interface by calling your activity.

    Your MainActivity should be like this.

    public class MainActivity extends AppCompatActivity {
    private String text ;
    private TextView textView, textView2,textView3,textView4;
    private SearchView searchView;
    private ListView listView ;
    private SendData sendData; // initialize it globally
    
    private String[] il={"Adana", "Adıyaman", "Afyon", "Ağrı", "Amasya", "Ankara", "Antalya", "Artvin",
            "Aydın", "Balıkesir", "Bilecik", "Bingöl", "Bitlis", "Bolu", "Burdur", "Bursa", "Çanakkale",
            "Çankırı", "Çorum", "Denizli", "Diyarbakır", "Edirne", "Elazığ", "Erzincan", "Erzurum", "Eskişehir",
            "Gaziantep", "Giresun", "Gümüşhane", "Hakkari", "Hatay", "Isparta", "Mersin", "İstanbul", "İzmir",
            "Kars", "Kastamonu", "Kayseri", "Kırklareli", "Kırşehir", "Kocaeli", "Konya", "Kütahya", "Malatya",
            "Manisa", "Kahramanmaraş", "Mardin", "Muğla", "Muş", "Nevşehir", "Niğde", "Ordu", "Rize", "Sakarya",
            "Samsun", "Siirt", "Sinop", "Sivas", "Tekirdağ", "Tokat", "Trabzon", "Tunceli", "Şanlıurfa", "Uşak",
            "Van", "Yozgat", "Zonguldak", "Aksaray", "Bayburt", "Karaman", "Kırıkkale", "Batman", "Şırnak",
            "Bartın", "Ardahan", "Iğdır", "Yalova", "Karabük", "Kilis", "Osmaniye", "Düzce"};
    private ArrayAdapter<String> arrayAdapter;
    
    public void setSendData(SendData sendData){     //create setter for interface
        this.sendData = sendData;
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
    
        searchView= (SearchView) findViewById(R.id.searchView);
        listView= (ListView) findViewById(R.id.listView);
        FragmentA fragmentA = new FragmentA() ;
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.add(R.id.frameLayout,fragmentA,"fragA");
        transaction.commit();
    
        arrayAdapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,android.R.id.text1,il);
        listView.setAdapter(arrayAdapter);
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }
    
            @Override
            public boolean onQueryTextChange(String newText) {
                arrayAdapter.getFilter().filter(newText);
                return false;
            }
        });
    
    
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, final int position, long id) {
                text = (String) listView.getItemAtPosition(position);
                sendData.gonder(text);
    
            }
        });
    }
    

    Your Fragment should be like this.

    public class FragmentA extends Fragment implements SendData {
    private TextView textView, textView2,textView3,textView4;
    
    View view ;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_a,container,false) ;
    
        textView4= (TextView) view. findViewById(R.id.textIsım);
        textView3= (TextView) view.findViewById(R.id.textView3);
        textView2= (TextView) view.findViewById(R.id.textView2);
        textView= (TextView) view. findViewById(R.id.textView);
        if(getActivity() instanceOf MainActivity)
           (MainActivity)getActivity().setSendData(this);  //set your interface in MainActivity
        return view;
    }
    
    @Override
    public void gonder(String isim) {
        Factory.getInstance().havaModel(isim,APPID_KEY).enqueue(new Callback<HavaModel>() {
            @Override
            public void onResponse(Call<HavaModel> call, Response<HavaModel> response) {
                textView.setText(Float.toString((float) (response.body().main.temp-273.15)));
                textView2.setText(Float.toString(response.body().coord.lon));
                textView3.setText(Integer.toString(response.body().main.humidity)+" %");
                textView4.setText(response.body().name);
    
            }
    
            @Override
            public void onFailure(Call<HavaModel> call, Throwable t) {
    
            }
        });
    }
    

    Hope it helps:)