繁体   English   中英

无法从OnClickListener启动Activity“该类型的方法startActivity(Intent,int)未定义”

[英]Can't start Activity from OnClickListener “method startActivity(Intent, int) is undefined for the type”

我正在使用从SQLite数据库检索的项目填充Scrollview,并使用以下代码为每一行动态生成OnClickListener。 我希望OnClickListener中的代码将控制权返回给使用Intent调用它(MealActivity)的Activity,并传回被单击的项目的ID。

我已尝试使用下面的第二个代码段进行此操作,但遇到编译错误:“对于类型OnClickListenerSelectPresetItem,未定义方法startActivity(Intent,int)。”

如何从OnClickListener调用原始的Activity?

public class SelectPresetItemActivity extends Activity {

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

        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment()).commit();
        }

        readRecords();
    }

    public void readRecords() {
        LinearLayout linearLayoutRecords = (LinearLayout) findViewById(R.id.linearLayoutRecords);
        linearLayoutRecords.removeAllViews();

        List<preset_item> preset_item = new TableControllerPresetItem(this).read();

        if (preset_item.size() > 0) {

            for (preset_item obj : preset_item) {

                long id = obj.id;
                String PresetDesc = obj.preset_desc;
                int PresetMinutes = obj.preset_minutes;

                String textViewContents = PresetDesc + " - "
                        + PresetMinutes + " minutes";

                TextView textViewItem = new TextView(this);
                textViewItem.setPadding(0, 10, 0, 10);
                textViewItem.setText(textViewContents);
                textViewItem.setTag(Long.toString(id));

                textViewItem.setOnClickListener(new OnClickListenerSelectPresetItem());

                linearLayoutRecords.addView(textViewItem);
            }

        }

        else {

            TextView locationItem = new TextView(this);
            locationItem.setPadding(8, 8, 8, 8);
            locationItem.setText("No records yet.");

            linearLayoutRecords.addView(locationItem);
        }
    }listener

The method startActivity(Intent, int) is undefined for the type OnClickListenerSelectPresetItem


    public class SelectPresetItemActivity extends Activity {

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

            if (savedInstanceState == null) {
                getFragmentManager().beginTransaction()
                        .add(R.id.container, new PlaceholderFragment()).commit();
            }

            readRecords();
        }

        public void readRecords() {
            LinearLayout linearLayoutRecords = (LinearLayout) findViewById(R.id.linearLayoutRecords);
            linearLayoutRecords.removeAllViews();

            List<preset_item> preset_item = new TableControllerPresetItem(this).read();

            if (preset_item.size() > 0) {

                for (preset_item obj : preset_item) {

                    long id = obj.id;
                    String PresetDesc = obj.preset_desc;
                    int PresetMinutes = obj.preset_minutes;

                    String textViewContents = PresetDesc + " - "
                            + PresetMinutes + " minutes";

                    TextView textViewItem = new TextView(this);
                    textViewItem.setPadding(0, 10, 0, 10);
                    textViewItem.setText(textViewContents);
                    textViewItem.setTag(Long.toString(id));

                    textViewItem.setOnClickListener(new OnClickListenerSelectPresetItem());

                    linearLayoutRecords.addView(textViewItem);
                }

            }

            else {

                TextView locationItem = new TextView(this);
                locationItem.setPadding(8, 8, 8, 8);
                locationItem.setText("No records yet.");

                linearLayoutRecords.addView(locationItem);
            }
        }

这是OnCLickListener代码:

public class OnClickListenerSelectPresetItem implements OnClickListener {
    public final static String EXTRA_MEAL_ID = "com.ian.mealtimer.MEAL_ID";

    @Override
    public void onClick(View view) {

        Long selectedMealId = Long.valueOf(view.getTag().toString());
        Intent myIntent = new Intent(view.getContext(),
                MealActivity.class);
        long mealId = -1;
        myIntent.putExtra(EXTRA_MEAL_ID, selectedMealId);
        startActivity(myIntent, 0);

    }
}

您应该使用: startActivity(意图意图)

有一个具有整数参数的方法: startActivityForResult(Intent intent,int requestCode)

上下文也可以启动活动,因此您必须获取上下文。 您可以轻松地从视图中获取它:

@Override
public void onClick(View view) {

    Long selectedMealId = Long.valueOf(view.getTag().toString());
    Intent myIntent = new Intent(view.getContext(),
            MealActivity.class);
    long mealId = -1;
    myIntent.putExtra(EXTRA_MEAL_ID, selectedMealId);
    view.getContext().startActivity(myIntent);
}

您可以在此处阅读有关开始活动的更多信息。

startActivity是Context类的方法。 OnClickListener无法知道应在哪个上下文上调用它。 将Context作为参数传递给OnClickListener的构造函数并将其保存在内部:在类OnClickListenerSelectPresetItem中:

private Context context;
public OnClickListenerSelectPresetItem(Context context){
   this.context=context;
}

然后在此上下文上调用startActivity

this.context.startActivity(myIntent, 0);

并通过活动来构建它们

textViewItem.setOnClickListener(new OnClickListenerSelectPresetItem(this));

您如何将活动传递给OnClickListenerSelectPresetItem的构造函数,然后像下面这样使用它:

public class OnClickListenerSelectPresetItem implements OnClickListener {
    public final static String EXTRA_MEAL_ID = "com.ian.mealtimer.MEAL_ID";
private SelectPresetItemActivity selectPresetItemActivity;
    public OnClickListenerSelectPresetItem(SelectPresetItemActivity selectPresetItemActivity){
this.selectPresetItemActivity = selectPresetItemActivity;
     }
    @Override
    public void onClick(View view) {

        Long selectedMealId = Long.valueOf(view.getTag().toString());
        Intent myIntent = new Intent(view.getContext(),
                MealActivity.class);
        long mealId = -1;
        myIntent.putExtra(EXTRA_MEAL_ID, selectedMealId);
        selectPresetItemActivity.startActivity(myIntent, 0);

    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM