Search code examples
androidlistviewlayoutadapter

Set layout with listview selected item - Android


I have a problem.

  • I want redirect layout with the selected item on the listview.
  • And the layout I want to redirect has empty view objects and I want to fill them with data from the selected listview object
  • But I can't, I did debug and I'm getting an error on line 67 with click the listview object. What should I do?

Please help me I have homework

This code in onCreate method Code :

    final ListView listView = (ListView) findViewById(R.id.lw_yemekTarifleri);
    customAdapter adapter = new customAdapter(this, yemekTarifleriList);
    listView.setAdapter(adapter);


    listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            //Log.i("OnClick", "position = " + position);


            ImageView yemekResim = (ImageView) findViewById(R.id.iw_yemekResim);
            TextView yemekIsim = (TextView) findViewById(R.id.tw_yemekIsim);
            TextView yemekSure = (TextView) findViewById(R.id.tw_yemekSure);
            TextView yemekMalzemeler = (TextView) findViewById(R.id.tw_malzemeler);
            TextView yemekTarif = (TextView) findViewById(R.id.tw_tarif);

            yemekTarifi secilenYemek = yemekTarifleriList.get(position);

            yemekResim.setImageResource(secilenYemek.getResim());        //(line 67)!!!!!!!!!!!!
            yemekIsim.setText(secilenYemek.getIsim());
            yemekSure.setText(secilenYemek.getHazirlanisSuresi());
            yemekMalzemeler.setText(secilenYemek.getMalzemeler());
            yemekTarif.setText(secilenYemek.getTarif());

            setContentView(R.layout.yemek_tarifi);



        }
    });

Error:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.erensayar_yemektarifi, PID: 13293 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference at com.example.erensayar_yemektarifi.anaSayfa_yemekTarifleri$1.onItemClick(anaSayfa_yemekTarifleri.java:67) at android.widget.AdapterView.performItemClick(AdapterView.java:318) at android.widget.AbsListView.performItemClick(AbsListView.java:1159) at android.widget.AbsListView$PerformClick.run(AbsListView.java:3136) at android.widget.AbsListView$3.run(AbsListView.java:4052) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Codes are uploaded to github : github.com/erensayar/android


Solution

  • I found my problem. I forget open an activity class for my target layout. I was created layout but i didn't create an activity. And then, I should my data's i have to send other activity (my layout adapter) from listview onclick activity.

    And we should use intent Like this:

    //This block allready had

        final ListView listView = (ListView) findViewById(R.id.lw_yemekTarifleri);
        customAdapter adapter = new customAdapter(this, yemekTarifleriList);
        listView.setAdapter(adapter);
    

    //when we click on element in the listview (Sender)

        listView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                setContentView(R.layout.yemek_tarifi_yemek_tarifleri);
                yemekTarifi secilenYemek = yemekTarifleriList.get(position);
    
                //Log.d("OnClick", "position = " + yemekTarifleriList.get(position));
    
    
                //Elemanları layouta bastırmak için bu verileri öbür activity'e yani istediğimiz layouta göndermeliyiz. O da intent.putextra ile oluyor.
                Intent intent = new Intent(getApplicationContext(), yemekTarifiAdapter.class);
    
    
                intent.putExtra("isim", secilenYemek.getIsim());
                intent.putExtra("malzemeler", secilenYemek.getMalzemeler());
                intent.putExtra("tarif", secilenYemek.getTarif());
                intent.putExtra("sure", secilenYemek.getHazirlanisSuresi());
    
                startActivity(intent);
    
            }
        });
    

    //This block target loyout's class.(Adapter)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.yemek_tarifi_yemek_tarifleri);
    
        ImageView yemekResim = (ImageView) findViewById(R.id.iw_yemekResim);
        TextView yemekIsim = (TextView) findViewById(R.id.tw_yemekIsim);
        TextView yemekSure = (TextView) findViewById(R.id.tw_yemekSure);
        TextView yemekMalzemeler = (TextView) findViewById(R.id.tw_malzemeler);
        TextView yemekTarif = (TextView) findViewById(R.id.tw_tarif);
    
    
        //Receiver 
        String isim = getIntent().getExtras().getString("isim");
        String malzemeler = getIntent().getExtras().getString("malzemeler");
        String tarif = getIntent().getExtras().getString("tarif");
        int sure = getIntent().getExtras().getInt("sure");
    
    
    
        yemekIsim.setText(isim);
        yemekSure.setText(String.valueOf(sure));
        yemekMalzemeler.setText(malzemeler);
        yemekTarif.setText(tarif);
    
    
    
    }//OnCreate Sonu
    

    Thanks to everyone who helped.

    If want to see all new code : github/erensayar/android