1

Ich möchte ein neues TextView in meinem Fragment hinzufügen. Dies ist mein Code in der AsyncTask backgroundjob Klasse:Legen Sie neue TextView zu Fragment in AsyncTask

protected void onPostExecute(String json) { 

    try { 
     JSONObject jsonObject = new JSONObject(json); 
     JSONArray jsonArray = jsonObject.getJSONArray("server_response"); 
     JSONObject JO = jsonArray.getJSONObject(0); 
     String code = JO.getString("code"); 
     String message = JO.getString("message"); 

     if (code.equals("true")) { 
      /**********************************/ 

      LayoutInflater inflater = activity.getLayoutInflater(); 
      View mContainer = inflater.inflate(R.layout.fragment_home, null); 
      LinearLayout linearLayout = (LinearLayout)mContainer.findViewById(R.id.mylinearLayout); 

      TextView text = new TextView(linearLayout.getContext()); 
      text.setText("TEST"); 
      text.setTextSize(30); 

      Log.d("View", "Start"); 
      try { 
       linearLayout.addView(text); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

Und das ist mein Fragment Klasse:

public class Home extends Fragment { 

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

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     TopicBackgroundTask backgroundTask = new TopicBackgroundTask(getActivity()); 
     backgroundTask.execute("yes"); 

     // Inflate the layout for this 

     return inflater.inflate(R.layout.fragment_home, container, false); 
    } 
} 

HINWEIS: Home Fragment und TopicBackgroundTask zwei verschiedene Klasse

Diese funktioniert nicht für mich. Kann mir jemand sagen warum?

Antwort

0

Sie brauchen nicht das Layout aufzublasen wieder in onPostExecute()

müssen Sie wiederverwenden Layout, das in onCreateView() gegeben wurde, so erhalten Sie eine globale Variable Ansicht erstellen müssen, setzen es in onCreateView() anstatt es direkt zurückzugeben.

wie -
myView = inflater.inflate(R.layout.fragment_home, container, false);

und in onPostExecute(),

LinearLayout linearLayout = (LinearLayout)mContainer.findViewById(R.id.mylinearLayout); 

    TextView text = new TextView(linearLayout.getContext()); 
       text.setText("TEST"); 
       text.setTextSize(30); 

       Log.d("View", "Start"); 
       try { 
        linearLayout.addView(text); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
+0

'Home' Fragment und' TopicBackgroundTask' ist zwei verschiedene ** Klasse ** + Sie können 'View' von' onCreateView() 'nicht aufrufen' Ich versuche, 'getActivity() .setContentView (mContainer);' und es hinzuzufügen Arbeit aber es zeigt sich außerhalb des Fragments –

0

I gefunden die Lösung müssen Sie die View der LayoutUmViewGroup

protected void onPostExecute(String json) { 

    try { 
     JSONObject jsonObject = new JSONObject(json); 
     JSONArray jsonArray = jsonObject.getJSONArray("server_response"); 
     JSONObject JO = jsonArray.getJSONObject(0); 
     String code = JO.getString("code"); 
     String message = JO.getString("message"); 

     if (code.equals("true")) { 
      /**********************************/ 

      LayoutInflater inflater = activity.getLayoutInflater(); 
      View mContainer = inflater.inflate(R.layout.fragment_home, null); 
      // LinearLayout linearLayout = (LinearLayout)mContainer.findViewById(R.id.mylinearLayout); 

      TextView text = new TextView(linearLayout.getContext()); 
      text.setText("TEST"); 
      text.setTextSize(30); 

      Log.d("View", "Start"); 
      try { 
       ((ViewGroup)activity.findViewById(R.id.mylinearLayout)).addView(text); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
gegossen
Verwandte Themen