【问题标题】:The method startActivityForResult(Intent, int) is undefined for the type new AdapterView.OnItemClickListener未为类型 new AdapterView.OnItemClickListener 定义方法 startActivityForResult(Intent, int)
【发布时间】:2011-02-13 15:31:33
【问题描述】:

嘿, 我是 android 新手,我正在尝试编写一个从网络上获取 json 数据的应用程序,创建一个列表。如果您单击列表项,则会启动一个新活动,其中显示活动的详细信息。但是我似乎无法开始第二个活动,我不断收到错误“方法 startActivityForResult(Intent, int) 未定义用于类型 new AdapterView.OnItemClickListener(){}”在 Eclipse 中。这是完整的来源。 有什么想法吗?

public class Main extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        new LongOperation(this).execute();
    }


    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        new LongOperation(this).execute();
        return true;
    }
}

class LongOperation extends AsyncTask<String, Void, String> {
    private Main longOperationContext = null;
    ProgressDialog pd = null;
    TextView tv = null;
    ListView lv1 = null;
    String [] lv_arr;
    String [] lv_arr_id;
    private static final int ACTIVITY_CREATE = 0;



    public LongOperation(Main context) {
        longOperationContext = context;
        Log.v("LongOper", "Konstuktor");
    }

    @Override
    protected String doInBackground(String... params) {
        Log.v("doInBackground", "inside");
        try {
            URL json = new URL("http://www.ytmusicplayer.com/jsontest.php");
            URLConnection tc = json.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(tc.getInputStream()));

            String line;
            while ((line = in.readLine()) != null) {
                    JSONArray ja = new JSONArray(line);
                    Log.v("line = ", " " + ja.length());
                    lv_arr = new String[ja.length()];
                    lv_arr_id = new String[ja.length()];
                    for (int i=0;i<ja.length();i++) {
                        JSONObject jo = (JSONObject) ja.get(i);
                        lv_arr[i] = jo.getString("name");
                        lv_arr_id[i] = jo.getString("id");
                    }
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
            Log.v("Error", "URL exc");
        } catch (IOException e) {
            e.printStackTrace();
            Log.v("ERROR", "IOEXECPTOIn");
        } catch (JSONException e) {
            e.printStackTrace();
            Log.v("Error", "JsonException");
        }
        Log.v("Line: ", lv_arr[0] + " - " + lv_arr[1]);
        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        lv1.setAdapter(new ArrayAdapter<String>(longOperationContext,android.R.layout.simple_list_item_1 , lv_arr));
        lv1.setTextFilterEnabled(true);
        lv1.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> a, View v, int position, long id) {
                        Intent i = new Intent(longOperationContext, Details.class);
                        i.putExtra("id", lv_arr_id[position]);
                        startActivityForResult(i, ACTIVITY_CREATE);
                }
        });
        pd.hide();
    }
    protected void onPreExecute() {
        lv1 = (ListView)longOperationContext.findViewById(R.id.ListView01);
        pd = new ProgressDialog(longOperationContext);
        pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        pd.setMessage("Loading...");
        pd.setIndeterminate(true);
        pd.setCancelable(false);
        pd.show();
    }

    @Override
    protected void onProgressUpdate(Void... values) {
    }
}

提前致谢

【问题讨论】:

    标签: android listview android-activity android-intent android-asynctask


    【解决方案1】:

    发生这种情况是因为该行代码出现在内部类中。 Java 认为您正在尝试访问内部类的方法,而您想要的是外部类的方法(活动的方法)。在任何方法调用之前都有一个隐含的this关键字,所以你实际上是在做this.startActivityForResult(i, ACTIVITY_CREATE);

    尝试使用Main.this.startActivityForResult(i, ACTIVITY_CREATE);

    此语法是您访问外部类类型对象的方式。

    【讨论】:

    • 好的修复它。你是对的。 Main.this.startActivityForResult 没用,但 longOperationContext.startActivityForResult 没用!再次感谢
    • 啊,当然,我没看到,你实际上是在除 Main 之外的另一个班级。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多