解决片段中的startActivity

时间:2015-12-17 12:15:08

标签: android android-fragments android-intent start-activity

我的代码中存在问题。我的问题与(this, newactivity.class)有关。当应用程序在模拟器上运行时,它不起作用。最后描述了导致问题的那一行。

我尝试打开一个新活动public class UpdateAnsList extends Fragment{ /** * @param args */ final static String ARG_POSITION_ANSWER = "position"; private String jsonResult; private ListView listView; public int selsub; public Activity activity; public String tagsub; private Context mContext; private Activity mact; public UpdateAnsList(Activity _activity){ mact = _activity; this.activity = _activity; super.onAttach(_activity); mContext = this.activity.getApplicationContext(); } public enum SubSectionAnswer { TagArt, TagBio } public void StartUpdateAnsList(int v, String o){ tagsub = o; selsub = v; SubSectionAnswer currentSub = SubSectionAnswer.valueOf(tagsub); listView = (ListView) this.activity.findViewById(R.id.listView11); selectItemAns(selsub,currentSub); accessWebService(); } private void selectItemAns(int position, SubSectionAnswer currentSub) { switch(currentSub){ case TagArt: switch(position){ case R.id.buttonArt001: url = "myip/newfolder/question_2.php"; tagdb = "info_general"; break; case R.id.buttonArt002: url = "http://myip/newfolder/question_1.php"; tagdb = "info_animation"; break; case 2: break; } break; case TagBio: switch(position){ case R.id.ButtonBio001: url = "http://myip/newfolder/question_4.php"; tagdb = "info_general"; break; case R.id.buttonBio002: url = "http://myip/newfolder/question_5.php"; tagdb = "info_evolution"; break; case 2: break; } break; } } // Async Task to access the web private class JsonReadTask extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(params[0]); try { HttpResponse response = httpclient.execute(httppost); jsonResult = inputStreamToString( response.getEntity().getContent()).toString(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } private StringBuilder inputStreamToString(InputStream is) { String rLine = ""; StringBuilder answer = new StringBuilder(); BufferedReader rd = new BufferedReader(new InputStreamReader(is)); try { while ((rLine = rd.readLine()) != null) { answer.append(rLine); } } catch (IOException e) { // e.printStackTrace(); //Toast.makeText(getApplicationContext(), // "Error..." + e.toString(), Toast.LENGTH_LONG).show(); } return answer; } @Override protected void onPostExecute(String result) { ListDrwaer(); } }// end async task public void accessWebService() { JsonReadTask task = new JsonReadTask(); // passes values for the urls string array task.execute(new String[] { url }); } // build hash set for list view public void ListDrwaer() { List<Map<String, String>> employeeList = new ArrayList<Map<String, String>>(); try { JSONObject jsonResponse = new JSONObject(jsonResult); JSONArray jsonMainNode = jsonResponse.optJSONArray(tagdb); for (int i = 0; i < jsonMainNode.length(); i++) { JSONObject jsonChildNode = jsonMainNode.getJSONObject(i); String name = jsonChildNode.optString("employee name"); String number = jsonChildNode.optString("content_text"); //String outPut = name + "-" + number; String outPut = name; String outPut1 = number; employeeList.add(createEmployee("Question", outPut,"textlong",number)); } } catch (JSONException e) { Toast.makeText(this.activity, "Error" + e.toString(), Toast.LENGTH_SHORT).show(); } //new String[] { "employees" } //new int[] { android.R.id.text1 } String[] de = {"Question", "textlong"}; int[] para ={R.id.textView1list11, R.id.textView11 }; SimpleAdapter simpleAdapter = new SimpleAdapter(this.activity, employeeList, R.layout.activity_item_list_answer, de, para); listView.setAdapter(simpleAdapter); listView.setOnItemClickListener(new ListClickHandler()); //Toast.makeText(getApplication(), "c", Toast.LENGTH_SHORT).show(); } public class ListClickHandler implements OnItemClickListener{ public void onItemClick(AdapterView<?> adapter, View view, int position, long arg3) { // TODO Auto-generated method stub int a =1 ; //Toast.makeText(mContext, "c", Toast.LENGTH_SHORT).show(); //Intent i = new Intent(mact, QuestionActivity.class); //mContext.startActivity(i); // create intent to perform web search for this planet Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); intent.putExtra(SearchManager.QUERY, "test"); // catch event that there's no activity to handle intent mContext.startActivity(intent); } } private HashMap<String, String> createEmployee(String s1, String s2, String s3,String s4) { HashMap<String, String> employeeNameNo = new HashMap<String, String>(); employeeNameNo.put(s1, s2); employeeNameNo.put(s3, s4); return employeeNameNo; } } ,但问题仍然存在。

UpdateAnsList

mContext.startActivity(intent);

这是引起问题的一行:

getActivity()

调试屏幕:

debug

我使用{{1}}时的屏幕:

screenshot

3 个答案:

答案 0 :(得分:1)

您应该使用Activity上下文开始新的Activity

getActivity.startActivity(intent);

答案 1 :(得分:0)

基本上您正在使用片段

如何从片段

开始活动
mContext.startActivity(intent);

修改1:

private Context mContext;

 public void StartUpdateAnsList(Context ctx, int v, String o){
        mContext = ctx;
        tagsub = o;
        selsub = v;     
        SubSectionAnswer currentSub = SubSectionAnswer.valueOf(tagsub);
        listView = (ListView) this.activity.findViewById(R.id.listView11);

        selectItemAns(selsub,currentSub);
        accessWebService();
    }

现在您可以使用:mContext.startActivity(intent);

希望这会对你有所帮助。

答案 2 :(得分:0)

这是Fragment课程,因此您只需撰写Intent即无法传递this.startActivity(); 您需要做的是获得此Activity课程的Fragment 所以不应该写mContext.startActivity(intent);而应该写:

getActivity().startActivity(intent);