user3197707
user3197707

Reputation: 29

How to set onclick on listview row?

I have one complex listview and I have set onclick on listview item but I want to do that for each row of listview it should open there respective activity(different activity). what should I do? My code is here..

public class Content extends Activity {

    String [] content = {"Linked List", "Write your own function", "programs", "Trees", "Sorting Techniques", "C Pointer",
            "C Functions", "C Statements", "C Arrays", "C Variables", "C Structures", "C Macros", "C Headers", "C File Operations",
            "C Declarations and Definitions", "C Functions-built-in", "C Functions-The Main Function", "OS Concepts", 
            "General Concepts", "Compiling and Linking"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.content);

        ListView list = (ListView)findViewById(R.id.content_listView);

        ContentAdapter ca = new ContentAdapter();
        list.setAdapter(ca);

        list.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub


                /*Here I want to do something that after 
                clicking on any listview row it should open there respective page
                */

            }
        });
    }

    class ContentAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return content.length;
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int index, View v, ViewGroup vg) {
            // TODO Auto-generated method stub

            v = getLayoutInflater().inflate(R.layout.custom_content, null);

            TextView content_txt = (TextView)v.findViewById(R.id.custom_content_textView);

            content_txt.setText(content[index]);

            return v;
        }

    }

}

Upvotes: 0

Views: 92

Answers (4)

Hanan
Hanan

Reputation: 444

Use Enum instead of String, it is also helpful using fragments.

    public enum Content implements Activity { 
                     LINKED("Linked List"),WRITE ("Write your own function"),       
               PROGRAM("programs"),TREE ("Trees"),SORT( "Sorting Techniques")};


   private String name;


   Content(String name) {
    this.name = name;
}

  @Override
public String toString() {

    return name;
}


 @Override
public Activity getActivity() 
   {
    switch (this) 
   {

     case LINKED:

return (new Intent(this,Activity1.class));

    case WRITE:

    return (new Intent(this,Activity2.class));



    default:
        return null;
    }
       }

Upvotes: 0

Gaurav Gupta
Gaurav Gupta

Reputation: 4691

There are two option available.

  1. As suggested by others you can use.(recommended one)

     lv.setOnItemClickListener( Your OnItemClickListener ); 
    
  2. Since each row is part of your R.layout.custom_content, So you can set onclick listener on the top most layout of the xml file. This top most layout will cover all the view with in the row. (This is not recommended, but on possible solution).

     v = getLayoutInflater().inflate(R.layout.custom_content, null);
     TopMostLayoutType topmostlayout = (TopMostLayoutType)v.finViewById(R.id.topmostLayoutId);   
     topmostlayout.setOnClickListener(yourOnClickListener);
    

Upvotes: 0

Nathua
Nathua

Reputation: 8826

list.setOnItemClickListener(new OnItemClickListener() {

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

            switch (arg2){
               case 0:
                  startActivity(new Intent(this,Activity2.class));
                  break;
               case 1:
                  // do something else
                  break;
            }
     });

Upvotes: 1

Arya
Arya

Reputation: 1747

lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
    int position, long id) {
    // When clicked, show a toast with the TextView text
    if(position == 1) {
        //code specific to first list item    
        Intent myIntent = new Intent(view.getContext(), Html_file1.class);
        startActivityForResult(myIntent, 0);
    }

    if(position == 2) {
        //code specific to 2nd list item    
        Intent myIntent = new Intent(view.getContext(), Html_file2.class);
        startActivityForResult(myIntent, 0);
    }
}

});

Upvotes: 0

Related Questions