Tôi đang gặp một số sự cố với lỗi "Không thể thực hiện tham chiếu tĩnh" trong chương trình Android của tôi. Tôi đang tạo ra một trò chơi rơi cát (tương tự như trò chơi bột) và tôi tạo ra một lớp được gọi là điều khiển để tạo thanh điều khiển ở cuối màn hình với thanh trượt cho kích thước bàn chải (hoạt động tốt) và một nút để bật lên Hộp thoại cho phép người dùng chọn phần tử đã chọn. Tuy nhiên, khi tôi gọi DemoActivity.showDialog (2) từ mã của tôi, nó cung cấp tham chiếu tĩnh đến lỗi không tĩnh (DemoActivity là hoạt động chính của ứng dụng của tôi). Tôi cũng đã cố gắng thay đổi nó để chỉ Activity.showDialog (2), nhưng tôi đã nhận chính xác cùng một lỗi! Xin vui lòng giúp đỡ, tôi đang làm gì sai? Dưới đây là mã và nhờ tôi trước:"Không thể thực hiện tham chiếu tĩnh đối với phương pháp không tĩnh" trong Android
package sand.falling.opengl;
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.SeekBar;
public class Control extends LinearLayout
{
private ImageButton control_button;
private SeekBar brush_size_slider;
final CharSequence[] elementslist = {"Sand", "Water", "Plant", "Wall", "Fire", "Ice", "Generator", "Oil", "Magma", "Stone", "C4"};
public Control(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
protected void onFinishInflate()
{
control_button = (ImageButton) findViewById(R.id.element_picker_button);
brush_size_slider = (SeekBar) findViewById(R.id.brush_size_slider);
control_button.setOnClickListener
(
new OnClickListener()
{
public void onClick(View v)
{
//THIS DOESN'T WORK!!!!
DemoActivity.showDialog(2); //Run the element picker dialog
}
}
);
control_button.setImageResource(R.drawable.palette);
brush_size_slider.setOnSeekBarChangeListener
(
new SeekBar.OnSeekBarChangeListener()
{
public void onProgressChanged(SeekBar seekbar, int progress, boolean fromTouch)
{
int p = 32 * progress/100;
DemoActivity.setBrushSize(p);
Log.v("DemoActivity", "size:" + p);
}
public void onStartTrackingTouch(SeekBar seekbar) {}
public void onStopTrackingTouch(SeekBar seekbar) {}
}
);
brush_size_slider.setProgress((int)400/32);
}
}
EDIT: Tôi cố định nó bằng cách thêm những điều sau để mã Control.java tôi:
public class Control extends LinearLayout
{
private DemoActivity activity;
...
public void setActivity(DemoActivity act)
{
activity = act;
}
...
//Set a click listener for the button which should pop up element picker dialog when clicked
control_button.setOnClickListener
(
new OnClickListener()
{
public void onClick(View v)
{
activity.showDialog(2); //Run the element picker dialog
}
}
);
}
Và sau đó gọi control.setActivity(this);
từ phần onResume của tôi về DemoActivity.java ! Hy vọng nó sẽ giúp những người bạn với các vấn đề tương tự !!
Ah, tôi nghĩ mình hiểu rồi. Làm thế nào tôi sẽ đi về nhận được một tham chiếu đến một trường hợp cụ thể của lớp DemoActvity. AFAIK, tôi không tự tạo một bản thân, Android tự động thực hiện khi người dùng chạy ứng dụng của tôi, vậy làm thế nào để tôi tham khảo nó? Cảm ơn câu trả lời nhanh btw! – gkanwar
Hmm, không chắc chắn, tôi chưa thực hiện bất kỳ sự phát triển Android nào. Tôi sẽ xem tài liệu DemoActivity. DemoActivity có phương thức 'instance()' hay 'getInstance()' không? Nếu vậy, đó có thể là những gì bạn cần. –
Vâng, DemoActivity là một lớp mà tôi đã tạo mở rộng lớp Hoạt động chung chứa trong mã Android cơ bản. Tôi đã tìm tài liệu cho Activity trong Android, và có một hàm gọi là getInstanceCount(), nhưng không có gì giống như instance() hoặc getInstance(). – gkanwar