Im trying to built this app which simple consist of a ListView and different other activities that will be called when an item from the view is clicked. However, I am unable to implement a working onclicklistener in the main activity. With the code below, I am unable to open the activity.
Heres the code:
public void setOnItemClickListener(AdapterView<?> parent, View view,
int position, long id) {
switch( position )
{
case 0: Intent newActivity0 = new Intent(this, TempuraActivity.class);
startActivity(newActivity0);
break;
case 1: Intent newActivity1 = new Intent(this, TempuraActivity.class);
startActivity(newActivity1);
break;
case 2: Intent newActivity2 = new Intent(this, TempuraActivity.class);
startActivity(newActivity2);
break;
case 3: Intent newActivity3 = new Intent(this, TempuraActivity.class);
startActivity(newActivity3);
break;
case 4: Intent newActivity4 = new Intent(this, TempuraActivity.class);
startActivity(newActivity4);
break;
}
}
Any help would be appreciated 🙂 Comment if U need to see the full code, I will update in the post. Thanks!
Thanks for all the Replies!
Heres the full code:
public class MainActivity extends ListActivity {
private LayoutInflater mInflater;
private Vector<RowData> data;
RowData rd;
static final String[] title = new String[] {
"Christmas Crepes", "Dorayaki", "Corned Beef", "Tempura"
};
static final String[] release = new String[] {
"New!", "New!", "4 months ago", "New!"
};
static final String[] description = new String[] {
"Blehh..","Pam pam pam","new era","Steve Jobs is dead"
};
static final String[] difficulty = new String[] {
"Hard","Easy","Medium","Hard"
};
static final String[] serves = new String[] {
"4 persons","2 persons","2 cups","1 person"
};
static final String[] time = new String[] {
"40 mins","20 mins","50 mins","120 mins"
};
private Integer[] imgid = {
R.drawable.thumbone,R.drawable.thumbtwo,R.drawable.thumbthree,
R.drawable.thumbfour
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mInflater = (LayoutInflater) getSystemService(
Activity.LAYOUT_INFLATER_SERVICE);
data = new Vector<RowData>();
for(int i=0;i<title.length;i++){
try {
rd = new RowData(i,title[i],release[i],description[i],difficulty[i],serves[i],time[i]);
} catch (ParseException e) {
e.printStackTrace();
}
data.add(rd);
}
CustomAdapter adapter = new CustomAdapter(this, R.layout.list, android.R.id.list, data);
setListAdapter(adapter);
getListView().setTextFilterEnabled(true);
}
public void setOnItemClickListener(AdapterView<?> parent, View view,
int position, long id) {
switch( position )
{
case 0: Intent newActivity0 = new Intent(this, TempuraActivity.class);
startActivity(newActivity0);
break;
case 1: Intent newActivity1 = new Intent(this, TempuraActivity.class);
startActivity(newActivity1);
break;
case 2: Intent newActivity2 = new Intent(this, TempuraActivity.class);
startActivity(newActivity2);
break;
case 3: Intent newActivity3 = new Intent(this, TempuraActivity.class);
startActivity(newActivity3);
break;
case 4: Intent newActivity4 = new Intent(this, TempuraActivity.class);
startActivity(newActivity4);
break;
}
}
private class RowData {
protected int mId;
protected String mTitle;
protected String mRelease;
protected String mDescription;
protected String mDifficulty;
protected String mServes;
protected String mTime;
RowData(int id, String title, String release, String description, String difficulty, String serves, String time){
mId=id;
mTitle = title;
mRelease = release;
mDescription = description;
mDifficulty = difficulty;
mServes = serves;
mTime = time;
}
@Override
public String toString() {
return mId+" "+mTitle+" "+mRelease+" "+mDescription+" "+mDifficulty+" "+mServes+" "+mTime;
}
}
private class CustomAdapter extends ArrayAdapter<RowData> {
public CustomAdapter(Context context, int resource, int textViewResourceId, List<RowData> objects) {
super(context, resource, textViewResourceId, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
TextView title = null;
TextView release = null;
TextView description = null;
TextView difficulty = null;
TextView serves = null;
TextView time = null;
ImageView thumbnail=null;
RowData rowData= getItem(position);
if(null == convertView){
convertView = mInflater.inflate(R.layout.list, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}
holder = (ViewHolder) convertView.getTag();
title = holder.gettitle();
title.setText(rowData.mTitle);
release = holder.getdescription();
release.setText(rowData.mRelease);
description = holder.getrelease();
description.setText(rowData.mDescription);
difficulty = holder.getdifficulty();
difficulty.setText(rowData.mDifficulty);
serves = holder.getserves();
serves.setText(rowData.mServes);
time = holder.gettime();
time.setText(rowData.mTime);
thumbnail=holder.getImage();
thumbnail.setImageResource(imgid[rowData.mId]);
return convertView;
}
private class ViewHolder {
private View mRow;
private TextView title = null;
private TextView release = null;
private TextView description = null;
private TextView difficulty = null;
private TextView serves = null;
private TextView time = null;
private ImageView thumbnail=null;
public ViewHolder(View row) {
mRow = row;
}
public TextView gettitle() {
if(null == title){
title = (TextView) mRow.findViewById(R.id.title);
}
return title;
}
public TextView getrelease() {
if(null == release){
release = (TextView) mRow.findViewById(R.id.release);
}
return release;
}
public TextView getdescription() {
if(null == description){
description = (TextView) mRow.findViewById(R.id.description);
}
return description;
}
public TextView getdifficulty() {
if(null == difficulty){
difficulty = (TextView) mRow.findViewById(R.id.difficulty);
}
return difficulty;
}
public TextView getserves() {
if(null == serves){
serves = (TextView) mRow.findViewById(R.id.serves);
}
return serves;
}
public TextView gettime() {
if(null == time){
time = (TextView) mRow.findViewById(R.id.title);
}
return time;
}
public ImageView getImage() {
if(null == thumbnail){
thumbnail = (ImageView) mRow.findViewById(R.id.thumbnail);
}
return thumbnail;
}
}
}
}
If there are any better method to achieve what my app should, please post! Im in desperate need to finish this for once!
UPDATE
Change
To
And it should work.
ORIGINAL
Your code is a little confusing, a
setOnItemClickListenerexists but you need to actually pass the method aonItemClickListenerobject (or anonymous class).Perhaps you are looking for something like this in your ListActivity.
Here you can implement your switch statement inside the
onItemClickmethod of theonItemClickListenerand it should work.Note: You will have to change
thisto YourActivity.this as you will be inside an inner class and will need to reference the outer activity class.Alternatively you could override onListItemClick:
In your list activity to eliminate the additional call to
getListView()If this doesn’t answer your question please full code