android - 方法 startActivityForResult(Intent, int) 未定义类型 new AdapterView.OnItemClickListener

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

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

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) {
    }
}

提前致谢

最佳答案

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

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

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

关于android - 方法 startActivityForResult(Intent, int) 未定义类型 new AdapterView.OnItemClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4985002/

相关文章:

android - 为多个 Android 检测测试文件夹配置 Gradle

android - 我可以在自定义 ViewGroup 中获取 onBackPressed 事件吗?

asp.net - 分页 ListView 上的 MVC 项目

java - ActivityManager : Exception thrown when launching activities java. lang.IllegalArgumentException : val. 长度 > 91

Android Alert Dialog 用另一种颜色替换默认的蓝色

android - Xamarin Android主屏幕小部件单击按钮

java - Android:尝试在空对象引用上调用虚拟方法 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)'

html - Django 多个ListView到一个html页面

java - 如何在 10 位数字的第三位和下一个第三位和下一个第四位显示带点的数字?

android - 这是通过 onActivityResult 从设备管理员获取响应的正确方法吗