在 AsyncTask 中将新的 TextView 设置为片段
Posted
技术标签:
【中文标题】在 AsyncTask 中将新的 TextView 设置为片段【英文标题】:Set new TextView to fragment in AsyncTask 【发布时间】:2016-08-16 04:41:38 【问题描述】:我想在我的片段中添加一个新的TextView
。这是我在 asynctask backgroundjob 类中的代码:
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();
这是我的片段类:
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);
注意:Home
片段和TopicBackgroundTask
是两个不同的类
这对我不起作用。谁能告诉我为什么?
【问题讨论】:
【参考方案1】:您无需在onPostExecute()
中再次膨胀布局
您需要重新使用onCreateView()
中给出的布局,
所以你必须创建一个全局变量视图,
设置在onCreateView()
而不是直接返回。
点赞-myView = inflater.inflate(R.layout.fragment_home, container, false);
在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();
【讨论】:
Home
片段和TopicBackgroundTask
是两个不同的类 + 你不能从onCreateView()
调用View
我尝试添加getActivity().setContentView(mContainer);
并且它工作但它显示在片段之外【参考方案2】:
我找到解决方案,您必须将View
的Layout
To ViewGroup
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();
【讨论】:
以上是关于在 AsyncTask 中将新的 TextView 设置为片段的主要内容,如果未能解决你的问题,请参考以下文章
在 AsyncTask 运行时向 TextView 添加文本
在 Android 中,如何从 AsyncTask 更改 TextView? [复制]
无法使用 AsyncTask 在 TextView 中设置文本