Reputation: 29
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
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
Reputation: 4691
There are two option available.
As suggested by others you can use.(recommended one)
lv.setOnItemClickListener( Your OnItemClickListener );
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
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
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