Question

i have developed an application that have grid view layout and there are two item main item is image and sub item is text of image so i use custom image adapter class and it implement in main activity but i got error of class cast exception in log cat

my code is here

main class

public class MainActivity extends ActionBarActivity implements AdapterView.OnItemClickListener, AdapterView.OnItemSelectedListener {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    GridView gridView = (GridView) findViewById(R.id.gridView1);
    gridView.setAdapter(new ImageAdapter(getApplicationContext()));
    gridView.setOnItemClickListener(this);
    gridView.setOnItemSelectedListener(this);

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {


    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

    if (id == 0L)
        Toast.makeText(getApplicationContext(), "Zero", 1000).show();
    if (id == 1L) {
        Toast.makeText(getApplicationContext(), "one", 1000).show();
    }
    if (id == 2L) {
        Toast.makeText(getApplicationContext(), "two", 1000).show();
        return;
    }
    if (id == 3L) {
        Toast.makeText(getApplicationContext(), "three", 1000).show();
        return;
    }
    if (id == 4L) {
        Toast.makeText(getApplicationContext(), "foure", 1000).show();
        return;
    }
    if (id == 9L) {
        Toast.makeText(getApplicationContext(), "nine", 1000).show();
        return;
    }
    if (id == 7L) {
        Toast.makeText(getApplicationContext(), "seven", 1000).show();
        return;
    }
    if (id == 8L) {
        Toast.makeText(getApplicationContext(), "eight", 1000).show();
        return;
    }
    if (id == 6L) {
        Toast.makeText(getApplicationContext(), "six", 1000).show();
        return;
    }
    if (id == 5L) {
        Toast.makeText(getApplicationContext(), "five", 1000).show();
        return;
    }
    if (id == 11L)
        Toast.makeText(getApplicationContext(),"eleven",1000).show();
    return;
}





@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    setTitle("Hello world");
}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}

}

Adapter class

public class ImageAdapter extends BaseAdapter {
private Context mContext;

public ImageAdapter(Context applicationContext) {
    this.mContext = applicationContext;
}


@Override
public int getCount() {
    return 12;
}

@Override
public Object getItem(int position) {
    return null;
}

@Override
public long getItemId(int position) {
    return position;
}

public int getThumbId(int position) {
    switch (position) {
        default:
            throw new IllegalArgumentException("Error in m-Indicator home UI");
        case 0:
            return R.drawable.ic_launcher;
        case 1:
            return R.drawable.ic_launcher;
        case 2:
            return R.drawable.ic_launcher;
        case 3:
            return R.drawable.ic_launcher;
        case 5:
            return R.drawable.ic_launcher;
        case 4:
            return R.drawable.ic_launcher;
        case 6:
            return R.drawable.ic_launcher;
        case 7:
            return R.drawable.ic_launcher;
        case 8:
            return R.drawable.ic_launcher;
        case 9:
            return R.drawable.ic_launcher;
        case 10:
            return R.drawable.ic_launcher;
        case 11:
    }
    return R.drawable.ic_launcher;
}

public String getThumbText(int position) {
    switch (position) {
        default:
            throw new IllegalArgumentException("Error in m-Indicator home UI");
        case 0:
            return "Railway";
        case 1:
            return "Bus";
        case 2:
            return "Auto";
        case 3:
            return "Taxi";
        case 5:
            return "Jobs Indicator";
        case 4:
            return "Express";
        case 6:
            return "Manoranjan";
        case 7:
            return "Movies";
        case 8:
            return "Picnic Spots";
        case 9:
            return "Rail Alerts";
        case 10:
            return "Emergency";
        case 11:
    }
    return "About";
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {


    View localView = ((Activity) this.mContext).getLayoutInflater().inflate(R.layout.gridelement, null);
    TextView localTextView = (TextView) localView.findViewById(R.id.icon_text);
    localTextView.setText(getThumbText(position));
    ImageView localImageView = (ImageView) localView.findViewById(R.id.icon_image);
    ViewGroup.LayoutParams localLayoutParams = localImageView.getLayoutParams();
    localImageView.setImageResource(getThumbId(position));
    return localView;

}

}

Était-ce utile?

La solution

You are creating object of ImageAdapter as

gridView.setAdapter(new ImageAdapter(getApplicationContext()));

Here getApplicationContext() is object of Application not of Activity.

So line

View localView = ((Activity) this.mContext).getLayoutInflater().inflate(R.layout.gridelement, null);

of getView() throws this exception, because you are trying to cast Application object to Activity.


So you need to call it as

gridView.setAdapter(new ImageAdapter(MainActivity.this));

OR, donot cast the context.

Autres conseils

Try this way: you need to pass Activity Context into your ImageAdapter

gridView.setAdapter(new ImageAdapter(MainActivity.this));

And Change your ImageAdapter constructor

private Activity activity;
public ImageAdapter(Activity act) {
this.activity = act;
}

 @Override
public View getView(int position, View convertView, ViewGroup parent) {
View localView = activity.getLayoutInflater().inflate(R.layout.gridelement, null);
.......
return localView;

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top