Search code examples
androidlistviewsimpleadapter

Android: ListView click event not working using SimpleAdapter


In my app i am trying to set TextView as Strikethrough while clicking on list item. But Listview clik item is not working.

Here is the code:

    listView = ( ListView ) findViewById(R.id.listview);
    SimpleAdapter adapter = new SimpleAdapter( this, aList, R.layout.add_list_detail, 
                   new String[] { "txt", "cur" }, new int[] { R.id.txt, R.id.cur } );
    // Setting the adapter to the listView
    listView.setAdapter(adapter);


    Button btnAdd = (Button) findViewById(R.id.btnAdd);
    btnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent details = new  Intent(AddNewList.this, AddNewGrocery.class); // Call
            startActivityForResult(details, 1);
        }
       });
    listView.setClickable(true);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

          @Override
          public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

           // Object o = lv.getItemAtPosition(position);
            /* write you handling code like...
            String st = "sdcard/";
            File f = new File(st+o.toString());
            // do whatever u want to do with 'f' File object
            */  

              TextView item = (TextView) arg1.findViewById(R.id.txt);
              item.setPaintFlags(item.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
          }
        });


         protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == 1) {
            if(resultCode == RESULT_OK){
                Bundle b = data.getExtras();
                if ( b!= null ){
                String strName=data.getStringExtra("name");
                String strQty=data.getStringExtra("quantity");
                System.out.println(strName);
                System.out.println(strQty);





                SimpleAdapter adapter = new SimpleAdapter( this, aList, R.layout.add_list_detail, 
                        new String[] { "txt", "cur" }, new int[] { R.id.txt, R.id.cur } );

                    HashMap<String, String> hm = new HashMap<String,String>();

                    hm.put("txt", strName);
                    hm.put("cur",strQty);
                    aList.add(hm);

                // Keys used in Hashmap
                String[] from = {"txt","cur" };

                // Ids of views in listview_layout
                int[] to = {R.id.txt,R.id.cur};


                listView.setAdapter(adapter);
                adapter.notifyDataSetChanged();

                }
            }
            if (resultCode == RESULT_CANCELED) {
                //Write your code if there's no result
            }
        }
    }

Solution

  • I didn't find the problem on your code but I post you the full code which works:

    MainActivity.java:

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import android.support.v7.app.ActionBarActivity;
    import android.app.Activity;
    import android.content.Intent;
    import android.graphics.Paint;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
        ListView listView;
        Activity activity;
    
        ArrayList<Map<String, String>> aList;
    
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            activity = this;
            aList = new ArrayList<Map<String, String>>();
            String[] from = { "name", "quantity" };
            int[] to = { R.id.txt, R.id.cur };
            listView = (ListView) findViewById(R.id.add_list_detail);
            SimpleAdapter adapter = new SimpleAdapter(this, aList,
                    R.layout.add_list_detail, from, to);
            listView.setAdapter(adapter);
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
                @Override
                public void onItemClick(AdapterView<?> arg0, View arg1,
                        int position, long arg3) {
    
                    TextView item = (TextView) arg1.findViewById(R.id.txt);
                    item.setPaintFlags(Paint.STRIKE_THRU_TEXT_FLAG);
                }
            });
    
            Button btnAdd = (Button) findViewById(R.id.btnAdd);
            btnAdd.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    Intent details = new Intent(activity, Test.class); // Call
                    startActivityForResult(details, 1);
                }
            });
        }
    
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
            if (requestCode == 1) {
                if (resultCode == RESULT_OK) {
                    Bundle b = data.getExtras();
                    if (b != null) {
                        String strName = data.getStringExtra("name");
                        String strQty = data.getStringExtra("quantity");
                        System.out.println(strName);
                        System.out.println(strQty);
    
                        SimpleAdapter adapter = new SimpleAdapter(this, aList,
                                R.layout.add_list_detail, new String[] { "txt",
                                        "cur" }, new int[] { R.id.txt, R.id.cur });
    
                        HashMap<String, String> hm = new HashMap<String, String>();
    
                        hm.put("txt", strName);
                        hm.put("cur", strQty);
                        aList.add(hm);
    
                        // Keys used in Hashmap
                        String[] from = { "txt", "cur" };
    
                        // Ids of views in listview_layout
                        int[] to = { R.id.txt, R.id.cur };
    
                        listView.setAdapter(adapter);
                        adapter.notifyDataSetChanged();
    
                    }
                }
                if (resultCode == RESULT_CANCELED) {
                    // Write your code if there's no result
                }
            }
        }
    
    }
    

    Test.java:

    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class Test extends Activity{
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
    
            super.onCreate(savedInstanceState);
            setContentView(R.layout.testlayout);
            Button button = (Button) findViewById(R.id.back_button);
            button.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    Intent returnIntent = new Intent(); returnIntent.putExtra("name","myname1"); returnIntent.putExtra("quantity","quantity234"); setResult(RESULT_OK,returnIntent); finish();
    
                }
            });
    
    
        }
    }
    

    add_list_detail.xml:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.mytest.MainActivity"
        android:orientation="horizontal" >
    
        <TextView
            android:id="@+id/txt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />
    
        <TextView
            android:id="@+id/cur"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />
    
    </LinearLayout>
    

    activity_main.xml:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="com.example.mytest.MainActivity" >
    
    
    
        <ListView
            android:id="@+id/add_list_detail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/textView1"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="153dp" >
        </ListView>
    
        <Button
            android:id="@+id/btnAdd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/textView1"
            android:layout_marginLeft="53dp"
            android:layout_marginTop="40dp"
            android:layout_toRightOf="@+id/textView1"
            android:text="Button" />
    
    </RelativeLayout>
    

    testlayout.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
        <Button
            android:id="@+id/back_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button" />
    
    </LinearLayout>