在Asynctask的onPostExecute方法中实现动态文本视图

时间:2014-02-04 19:38:29

标签: android android-asynctask

我正在 Asynctask 类中从互联网上下载一些数据。
所以我正在使用 doInBackground 功能。
执行此功能后,我将值返回 onpostexecute 方法。

在此 onpostexecute 方法中 我需要制作动态的文字视图。

P.S:我在for循环中获取所有数据,我没有收到任何错误,我只是无法形成动态textviews。 这是我的代码:

protected void onPostExecute(String file_url) {
            //Links.setText(file_url);
            int iterator=0;

            Elements linksText = doc.select("#chapters .tips");
            for (Element link : linksText) {
                  link_link = link.attr("href");
                  narutoLinks[iterator]=link_link;//from latestlinks
                  System.out.println("narutoLinks[iterator]= "+iterator+" "+link_link);

                  link_Text = link.text();
                  narutoLinkHeadingName[iterator]=link_Text;
                  System.out.println("narutoText[iterator]= "+iterator+" "+narutoLinkHeadingName[iterator]);
                  iterator++;
                }
            System.out.println("iterator= "+iterator); 

             TextView[] textViewArray = new TextView[iterator];

            for( int i = 0; i < iterator; i++) {
                   textViewArray[i] = new TextView(narutoLinksOnly.this);
                   textViewArray[i].setText(narutoLinkHeadingName[i]);
                   textViewArray[i].setId(i); 
                   textViewArray[i].setTextColor(0xff000000);
                   textViewArray[i].setTextSize(20);
                   textViewArray[i].setOnClickListener(this);


                   textViewArray[i].setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));

                   ((LinearLayout) linearLayout).addView(textViewArray[i]);

                }


            System.out.println("senkai"); 
            if(connectionTimeout==true)
                {showToast("Connection Timeout");
                 connectionTimeout=false;
                }
            // dismiss the dialog after the file was downloaded
            dismissDialog(progress_bar_type);

            // Displaying downloaded image into image view
            // Reading image path from sdcard

        }

这是我的xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/Ivory"
    android:id="@+id/dynamicTextview1"
    android:orientation="vertical" >

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <TextView
        android:id="@+id/tvNarutoLinksOnly"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello"
        android:textColor="@color/black" />
    </ScrollView>

</LinearLayout

这就是我的 oncreate 方法的样子:

 View linearLayout;//declaring it inside the class itself

    @Override   
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.narutolinksonly);
        linearLayout =  findViewById(R.id.dynamicTextview1);
        initialize();
        new DownloadLinksFromURL().execute(url);
        System.out.println("inside on create"); 
    }
  1. 我的代码中遗漏了什么?
  2. 从Asynctask类获取数据后,获得动态textview的最佳方法是什么?
  3. 请帮助。

2 个答案:

答案 0 :(得分:0)

改为使用listview

并使用从服务器获取的字符串列表为其设置数组适配器。

但是在你的情况下试试:

  textViewArray[i].setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));

答案 1 :(得分:0)

您必须设置listview适配器。您拥有数据,但onCreateView上没有任何内容将该数据与listView相关联。

以下是Android站点上使用游标的适配器

的示例
    String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME};
    int[] toViews = {android.R.id.text1}; // The TextView in simple_list_item_1

    // Create an empty adapter we will use to display the loaded data.
    // We pass null for the cursor, then update it in onLoadFinished()
    mAdapter = new SimpleCursorAdapter(this, 
            android.R.layout.simple_list_item_1, null,
            fromColumns, toViews, 0);
    setListAdapter(mAdapter);

将他们的光标数据换成textViewArray数据并使其成为BaseAdapter或类似的,然后你就完成了