#java #android #constructor
#java #Android #конструктор
Вопрос:
Мой код:
public class ViewsActivity extends Activity implements OnClickListener
{
//
private Integer[] ImgIds = { R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4 };
private LinearLayout mLinearLayout;
private Gallery g;
private MediaPlayer mp;
private ImageView i;
private Thread th;
private Runnable viewUpdate;
private int m_index = 0;
private OnClickListener mImageListener = new OnClickListener()
{
@Override
public void onClick(View v)
{
setContentView(R.layout.main);
g = (Gallery) findViewById(R.id.gallery1);
g.setAdapter(new ImageAdapter(v.getContext()));
g.setOnItemClickListener(mGalleryClickListener);
g.setOnItemSelectedListener(mGallerySelectedListener);
}
};
private OnItemSelectedListener mGallerySelectedListener = new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView adapter, View v, int i, long lng)
{
String descr = "";
switch(i)
{
case 0:
descr = "scena1";
break;
case 1:
descr = "scena2";
break;
case 2:
descr = "scena3";
break;
case 3:
descr = "scena4";
break;
case 4:
descr = "scena5";
break;
case 5:
descr = "scena6";
break;
case 6:
descr = "scena7";
break;
case 7:
descr = "scena8";
break;
case 8:
descr = "scena9";
break;
case 9:
descr = "scena10";
break;
}
Toast.makeText(ViewsActivity.this, descr, Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView arg0)
{
}
};
private OnItemClickListener mGalleryClickListener = new OnItemClickListener()
{
public void onItemClick(AdapterView parent, View v, int position, long id)
{
switch(position)
{
case 0:
i.setImageResource(R.drawable.pic1);
break;
case 1:
i.setImageResource(R.drawable.pic2);
break;
case 2:
i.setImageResource(R.drawable.pic3);
break;
case 3:
i.setImageResource(R.drawable.pic4);
break;
case 4:
i.setImageResource(R.drawable.pic5);
break;
case 5:
i.setImageResource(R.drawable.pic6);
break;
case 6:
i.setImageResource(R.drawable.pic7);
break;
case 7:
i.setImageResource(R.drawable.pic8);
break;
case 8:
i.setImageResource(R.drawable.pic9);
break;
case 9:
i.setImageResource(R.drawable.pic10);
break;
}
setContentView(mLinearLayout);
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mp = MediaPlayer.create(this, R.raw.song);
mp.start();
Gallery g = (Gallery) findViewById(R.id.gallery1);
g.setAdapter(new ImageAdapter(this));
g.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView parent, View v, int position, long id) {
if (position >= ImgIds.length) {
position = position % ImgIds.length;
}
// Toast.makeText(this, "" position, Toast.LENGTH_SHORT).show();
}
});
}
//
public class ImageAdapter extends BaseAdapter {
int mGalleryItemBackground;
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);
mGalleryItemBackground = a.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0);
a.recycle();
}
public int getCount() {
return Integer.MAX_VALUE;
}
public Object getItem(int position) {
if (position >= ImgIds.length) {
position = position % ImgIds.length;
}
return position;
}
public long getItemId(int position) {
if (position >= ImgIds.length) {
position = position % ImgIds.length;
}
return position;
}
public View getView1(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(mContext);
if (position >= ImgIds.length) {
position = position % ImgIds.length;
}
i.setImageResource(ImgIds[position]);
i.setLayoutParams(new LayoutParams(80, 80));
i.setScaleType(ImageView.ScaleType.FIT_XY);
i.setBackgroundResource(mGalleryItemBackground);
return i;
}
public int checkPosition(int position) {
if (position >= ImgIds.length) {
position = position % ImgIds.length;
}
return position;
final Button buttonavanti = (Button) findViewById(R.id.Avanti);
buttonavanti.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
g.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);
}
});
final Button buttonindietro = (Button) findViewById(R.id.Indietro);
buttonindietro.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
g.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null);
}
});
final Button buttonexit = (Button) findViewById(R.id.Exit);
buttonexit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
mLinearLayout = new LinearLayout(this);
i = new ImageView(this);
i.setImageResource(R.drawable.pic1);
i.setAdjustViewBounds(true);
i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
mLinearLayout.addView(i);
mLinearLayout.setOnClickListener(mImageListener);
}
public void onClick(View v) {
// TODO Auto-generated method stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
return null;
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
}
У меня ошибка «конструктор не определен» с mLinearLayout = new LinearLayout(this)
и с i = new ImageView(this)
.
Ответ №1:
Похоже, вы вызываете LinearLayout(Context context)
из ImageAdapter, поэтому вы не можете использовать this
. Вам нужно передать контекст, а this
в ImageAdapter на контекст не ссылается. Используйте вашу локально объявленную переменную mContext
mLinearLayout = new LinearLayout(mContext)
i = new ImageView(mContext).
Комментарии:
1. 1 приятный момент, это распространенная ошибка, когда вы записываете несколько классов в один файл…
Ответ №2:
Это сработает..
mLinearLayout = new LinearLayout(ViewsActivity.this);
Комментарии:
1. Спасибо за ответ. Теперь это работает, но в то же время возвращает другую ошибку при » последней кнопке buttonavanti = (Button) findViewById(R.id.Avanti); »
2. Переместите этот код
return position;
в нижнюю часть функцииpublic int checkPosition(int position)
(или закройте эту функцию должным образом).3. Это потому, что вы поместили оператор return перед кодом .. наконец, поместите «return position»….
4. Большое спасибо! Работает идеально, но теперь, когда я запускаю программу, происходит сбой с » Приложение просматривает приложение (process net.learn2develope. AndroidViews) неожиданно остановился»
Ответ №3:
Это то же самое, что просто создать представление или макет без параметров layout_width и layout_height.
Вам нужно вызвать конструктор, который также принимает LayoutParams в качестве параметра и предоставить ему данные.