2017-02-23 44 views
-1

我開始使用導航抽屜,因爲我開始使用片段..在更改此活動並將代碼稍微更改爲新片段後移動。 。我得到一個錯誤onOptionsItemSelected方法裏面的片段..我應該把網址,如果它不是正確的地方放? !無法從活動更改爲片段後得到相同的結果

這是FoodView.java活動

public class FoodView extends AppCompatActivity { 


private ListView lvFood; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    setContentView(R.layout.activity_food_view); 


    lvFood = (ListView) findViewById(R.id.lvFood); 
} 

    public class JSONTask extends AsyncTask<String, String, List<FoodModel>> { 


     @Override 
     protected List<FoodModel> doInBackground(String... params) { 

      HttpURLConnection httpURLConnection = null; 
      BufferedReader reader = null; 


      try { 
       URL url = new URL(params[0]); 
       httpURLConnection = (HttpURLConnection) url.openConnection(); 
       httpURLConnection.connect(); 

       InputStream inputStream = httpURLConnection.getInputStream(); 
       reader = new BufferedReader(new InputStreamReader(inputStream)); 
       StringBuffer buffer = new StringBuffer(); 
       String line = ""; 
       while ((line = reader.readLine()) != null) { 
        buffer.append(line); 
       } 
       String finalJson = buffer.toString(); 


       JSONArray parentArray = new JSONArray(finalJson); 

       List<FoodModel> foodModelList = new ArrayList<>(); 


       for (int i = 0; i < parentArray.length(); i++) { 
        JSONObject finalObject = parentArray.getJSONObject(i); 
        FoodModel foodModel = new FoodModel(); 
        foodModel.setFood(finalObject.optString("name")); 
        foodModel.setStatus(finalObject.optString("status")); 
        foodModel.setAmount(finalObject.optInt("amount")); 
        foodModel.setDescription(finalObject.optString("description")); 
        foodModel.setDate(finalObject.optInt("exDate")); 


        foodModelList.add(foodModel); 
       } 

       return foodModelList; 

      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 


      } catch (JSONException e) { 
       e.printStackTrace(); 
      } finally { 
       if (httpURLConnection != null) { 
        httpURLConnection.disconnect(); 
       } 
      } 
      try { 
       if (reader != null) { 
        reader.close(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      return new ArrayList<>(); 
     } 

     @Override 
     protected void onPostExecute(List<FoodModel> result) { 
      super.onPostExecute(result); 

      FoodAdapter adapter = new FoodAdapter(getApplicationContext(), R.layout.row, result); 
      lvFood.setAdapter(adapter); 


     }} 

     public class FoodAdapter extends ArrayAdapter { 

      private List<FoodModel> foodModelList; 
      private int resource; 
      private LayoutInflater inflater; 

      public FoodAdapter(Context context, int resource, List<FoodModel> objects) { 
       super(context, resource, objects); 
       foodModelList = objects; 
       this.resource = resource; 
       inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); 


      } 


      @Override 
      public View getView(int position, View convertView, ViewGroup parent) { 
       if (convertView == null) { 
        convertView = inflater.inflate(resource, null); 
       } 

       ImageView ivIcon; 
       TextView foodName, txt_amount, txt_desc, txt_date, txt_status; 

       ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon); 
       foodName = (TextView) convertView.findViewById(R.id.foodName); 
       txt_amount = (TextView) convertView.findViewById(R.id.txt_amount); 
       txt_desc = (TextView) convertView.findViewById(R.id.txt_desc); 
       txt_status = (TextView) convertView.findViewById(R.id.txt_status); 
       txt_date = (TextView) convertView.findViewById(R.id.txt_date); 

       foodName.setText(foodModelList.get(position).getFood()); 
       txt_amount.setText("Amount: " + foodModelList.get(position).getAmount()); 
       txt_desc.setText(foodModelList.get(position).getDescription()); 
       txt_status.setText(foodModelList.get(position).getStatus()); 
       txt_date.setText("EX Date: " + foodModelList.get(position).getDate()); 


       return convertView; 
      } 
     } 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.navigation_drawer, menu); 
    return true; 
} 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    if (id == R.id.action_refresh) { 
     new JSONTask().execute("http://10.0.3.2/MySqlDemo/food.php"); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
} 

這FoodViewFragment.java片段

public class FoodViewFragment extends Fragment { 
private ListView lvFood; 
Context context = getActivity(); 

public FoodViewFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 

    View v = inflater.inflate(R.layout.fragment_food_view, container, false); 
    lvFood = (ListView)v. findViewById(R.id.lvFood); 

    return v; 
} 

public class JSONTask extends AsyncTask<String, String, List<FoodModel>> { 


    @Override 
    protected List<FoodModel> doInBackground(String... params) { 

     HttpURLConnection httpURLConnection = null; 
     BufferedReader reader = null; 


     try { 
      URL url = new URL(params[0]); 
      httpURLConnection = (HttpURLConnection) url.openConnection(); 
      httpURLConnection.connect(); 

      InputStream inputStream = httpURLConnection.getInputStream(); 
      reader = new BufferedReader(new InputStreamReader(inputStream)); 
      StringBuffer buffer = new StringBuffer(); 
      String line = ""; 
      while ((line = reader.readLine()) != null) { 
       buffer.append(line); 
      } 
      String finalJson = buffer.toString(); 


      JSONArray parentArray = new JSONArray(finalJson); 

      List<FoodModel> foodModelList = new ArrayList<>(); 


      for (int i = 0; i < parentArray.length(); i++) { 
       JSONObject finalObject = parentArray.getJSONObject(i); 
       FoodModel foodModel = new FoodModel(); 
       foodModel.setFood(finalObject.optString("name")); 
       foodModel.setStatus(finalObject.optString("status")); 
       foodModel.setAmount(finalObject.optInt("amount")); 
       foodModel.setDescription(finalObject.optString("description")); 
       foodModel.setDate(finalObject.optInt("exDate")); 


       foodModelList.add(foodModel); 
      } 

      return foodModelList; 

     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 


     } catch (JSONException e) { 
      e.printStackTrace(); 
     } finally { 
      if (httpURLConnection != null) { 
       httpURLConnection.disconnect(); 
      } 
     } 
     try { 
      if (reader != null) { 
       reader.close(); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return new ArrayList<>(); 
    } 

    @Override 
    protected void onPostExecute(List<FoodModel> result) { 
     super.onPostExecute(result); 

     FoodViewFragment.FoodAdapter adapter = new FoodViewFragment.FoodAdapter(context, R.layout.row, result); 
     lvFood.setAdapter(adapter); 




    }} 
public class FoodAdapter extends ArrayAdapter { 

    private List<FoodModel> foodModelList; 
    private int resource; 
    private LayoutInflater inflater; 

    public FoodAdapter(Context context, int resource, List<FoodModel> objects) { 
     super(context, resource, objects); 
     foodModelList = objects; 
     this.resource = resource; 
     inflater = (LayoutInflater)getActivity().getSystemService(LAYOUT_INFLATER_SERVICE); 


    } 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = inflater.inflate(resource, null); 
     } 

     ImageView ivIcon; 
     TextView foodName, txt_amount, txt_desc, txt_date, txt_status; 

     ivIcon = (ImageView) convertView.findViewById(R.id.ivIcon); 
     foodName = (TextView) convertView.findViewById(R.id.foodName); 
     txt_amount = (TextView) convertView.findViewById(R.id.txt_amount); 
     txt_desc = (TextView) convertView.findViewById(R.id.txt_desc); 
     txt_status = (TextView) convertView.findViewById(R.id.txt_status); 
     txt_date = (TextView) convertView.findViewById(R.id.txt_date); 

     foodName.setText(foodModelList.get(position).getFood()); 
     txt_amount.setText("Amount: " + foodModelList.get(position).getAmount()); 
     txt_desc.setText(foodModelList.get(position).getDescription()); 
     txt_status.setText(foodModelList.get(position).getStatus()); 
     txt_date.setText("EX Date: " + foodModelList.get(position).getDate()); 


     return convertView; 
    } 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    if (id == R.id.action_refresh) { 
     new JSONTask().execute("http://10.0.3.2/MySqlDemo/food.php"); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

} 

這是navigationDrawer.java類內代碼的一部分,我想runf nav_home項目和顯示FoodViewFragmentActivity

public boolean onNavigationItemSelected(MenuItem item) { 



    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.nav_home) { 
     setTitle("Food View"); 

     FoodViewFragment fragment = new FoodViewFragment(); 
     FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.content_frame,fragment, "fragment1"); 
     fragmentTransaction.commit(); 


    } else if (id == R.id.nav_food) { 

    } else if (id == R.id.nav_money) { 

    } else if (id == R.id.nav_settings) { 

    } else if (id == R.id.nav_about) { 

    } else if (id == R.id.nav_notifications) { 

    } 


    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 
    return true; 
} 

回答

1

將這些方法保留在您的activi TY,從片段中刪除

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.navigation_drawer, menu); 
    return true; 
} 


@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

     if (id == R.id.action_refresh) { 
     // add this line in your activity 


     ((FoodViewFragment)selectedFragment).yourServerCallMethodInF‌​ragment(); 
      return true; 
     } 

return super.onOptionsItemSelected(item); 
} 

在活動水平

private Fragment selectedFragment; 

保持當前片段和在

public boolean onNavigationItemSelected(MenuItem item) { 



// Handle navigation view item clicks here. 
int id = item.getItemId(); 

if (id == R.id.nav_home) { 
    setTitle("Food View"); 

    selectedFragment = new FoodViewFragment(); 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.content_frame,selectedFragment, "fragment1"); 
    fragmentTransaction.commit(); 


} else if (id == R.id.nav_food) { 

} else if (id == R.id.nav_money) { 

} else if (id == R.id.nav_settings) { 

} else if (id == R.id.nav_about) { 

} else if (id == R.id.nav_notifications) { 

} 


DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
drawer.closeDrawer(GravityCompat.START); 
return true; 
} 

獲得選擇的片段的引用現在您的片段會有這種方法

public void yourServerCallMethodInFragment(){ 
new JSONTask().execute("http://10.0.3.2/MySqlDemo/food.php"); 
} 
+0

何pe會幫你 –

+0

if(id == R.id.action_refresh){ //在你的活動中加入這一行 selectedFragment.yourServerCallMethodInFragment(); 返回true; } – layla7

+0

上面的部分顯示錯誤... selectedFragment.yourServerCallMethodInFragment(); – layla7