怎样才能的LinearLayout(LinearLayout中)在我的班级可见? [英] How can LinearLayout(linearLayout) be visible in my class?

查看:105
本文介绍了怎样才能的LinearLayout(LinearLayout中)在我的班级可见?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个班,XMLParser.java扩展了活动,并导入ClassAsyncTask.java(从我自己的库)。现在即时通讯有我的XMLParser的问题,它说,该LinearLayout中是不可见的,如何解决这个问题?谢谢

 公共XMLParser类扩展活动{@覆盖
公共无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);    ClassAsyncTask aObj =新ClassAsyncTask(
            http://www.androidpeople.com/wp-content/uploads/2010/06/example.xml,这一点);
    aObj.execute();    //这是我的问题,这个领域ClassAsyncTask.linearLayout是不可见的
    aObj.linearLayout =新的LinearLayout(本);
    aObj.linearLayout.setOrientation(1);    / *设置内容查看布局显示* /
    this.setContentView(aObj.linearLayout);}}

这是一个由XMLParser.java进口ClassAsyncTask.java(从我自己的图书馆)

 公共类ClassAsyncTask扩展的AsyncTask<弦乐,太虚,字符串> {
串TargetURL的;
TextView的名字[],网站[],分类[];
LinearLayout中的LinearLayout;
上下文语境;公共ClassAsyncTask(字符串现场,上下文CTX){
    TargetURL中=网站;
    上下文= CTX;
}
@覆盖
保护字符串doInBackground(字符串的URL ...){    尝试{        / *处理XML * /
        SPF SAXParserFactory的= SAXParserFactory.newInstance();
        的SAXParser SP = spf.newSAXParser();
        XMLReader的XR = sp.getXMLReader();        / *发送URL解析XML标签* /
        网址sourceUrl =新的URL(TargetURL中);        / *创建处理程序来处理XML标签(扩展的DefaultHandler)* /
        MyXMLHandler myXMLHandler =新MyXMLHandler();
        xr.setContentHandler(myXMLHandler);
        xr.parse(新的InputSource(sourceUrl.openStream()));    }赶上(例外五){
        的System.out.println(XML帕兴错误时抛出=+ e)条;
    }
    返回null;
}/ *从doInBackground返回值* /
保护无效onPostExecute(字符串结果){    / *从MyXMLHandler SitlesList对象*获取结果/
    站点列表sitesList = MyXMLHandler.sitesList;    / *由ArrayList的大小分配的TextView数组长度* /
    NAME =新的TextView [sitesList.getName()大小()];
    网站=新的TextView [sitesList.getName()大小()];
    类别=新的TextView [sitesList.getName()大小()];    。INT H = sitesList.getName()大小();
    / *设置TextView的结果文本,并把它添加到布局* /
    的for(int i = 0; I< H,我++){        名称由[i] =新的TextView(getApplicationContext());
        命名[I] .setText(名称=+ sitesList.getName()得到(一));
        网站由[i] =新的TextView(getApplicationContext());
        网站由[i] .setText(网站=+ sitesList.getWebsite()得到(一));
        类别[I] =新的TextView(getApplicationContext());
        类别[I] .setText(简称网站分类=+ sitesList.getCategory()获得(一));
        linearLayout.addView(名称[I]);
        linearLayout.addView(网站[I]);
        linearLayout.addView(类别[I]);    }
}}


解决方案

我建议你不要访问的LinearLayout 的方式,而是有它getter和setter方法​​。

在你的 ClassAsyncTask.java

 的LinearLayout的LinearLayout;公共无效setLinearLayout(LinearLayout中的LinearLayout){
    this.linearLayout =的LinearLayout;
}
公众的LinearLayout getLinearLayout(){
    返回的LinearLayout;
}

然后在你的 XMLParser.java ,只是做的LinearLayout myLinearLayout = aobj.getLinearLayout()做编辑要布局,然后通过 aobj.setLinearLayout(myLinearLayout)将其返回到 ClassAsyncTask

I have two classes, the "XMLParser.java" extends the activity and imports the "ClassAsyncTask.java"(from my own library). Now Im having problem in my XMLParser, it says that the linearlayout is not visible, How can I fix this error? thanks

public class XMLParser extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ClassAsyncTask aObj = new ClassAsyncTask(
            "http://www.androidpeople.com/wp-content/uploads/2010/06/example.xml", this);
    aObj.execute();

    //THIS IS MY PROBLEM, "The field ClassAsyncTask.linearLayout is not visible"
    aObj.linearLayout = new LinearLayout(this);
    aObj.linearLayout.setOrientation(1);

    /* Set the ContentView to layout for display */
    this.setContentView(aObj.linearLayout);

}

}

This is the ClassAsyncTask.java(from my own Library) that was imported by XMLParser.java

public class ClassAsyncTask extends AsyncTask<String, Void, String> {


String targetURL;
TextView name[], website[], category[];
LinearLayout linearLayout;
Context context;

public ClassAsyncTask(String site, Context ctx){
    targetURL = site;
    context = ctx;
}


@Override
protected String doInBackground(String... urls) {

    try {

        /* Handling XML */
        SAXParserFactory spf = SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        XMLReader xr = sp.getXMLReader();

        /* Send URL to parse XML Tags */
        URL sourceUrl = new URL(targetURL);

        /* Create handler to handle XML Tags ( extends DefaultHandler ) */
        MyXMLHandler myXMLHandler = new MyXMLHandler();
        xr.setContentHandler(myXMLHandler);
        xr.parse(new InputSource(sourceUrl.openStream()));

    } catch (Exception e) {
        System.out.println("XML Pasing Excpetion = " + e);
    }
    return null;
}

/* Return-value from doInBackground */
protected void onPostExecute(String result) {

    /* Get result from MyXMLHandler SitlesList Object */
    SiteList sitesList = MyXMLHandler.sitesList;

    /* Assign TextView array length by arrayList size */
    name = new TextView[sitesList.getName().size()];
    website = new TextView[sitesList.getName().size()];
    category = new TextView[sitesList.getName().size()];

    int h = sitesList.getName().size();
    /* Set the result text in TextView and add it to layout */
    for (int i = 0; i < h; i++) {

        name[i]= new TextView(getApplicationContext());
        name[i].setText("Name = " + sitesList.getName().get(i));
        website[i]= new TextView(getApplicationContext());
        website[i].setText("Website = " + sitesList.getWebsite().get(i));
        category[i]= new TextView(getApplicationContext());
        category[i].setText("Website Category = " + sitesList.getCategory().get(i));
        linearLayout.addView(name[i]);
        linearLayout.addView(website[i]);
        linearLayout.addView(category[i]);

    }
}

}

解决方案

I suggest you don't access LinearLayout that way, and instead have setters and getters for it.

In your ClassAsyncTask.java

LinearLayout linearLayout;

public void setLinearLayout(LinearLayout linearLayout){
    this.linearLayout = linearLayout;
}


public LinearLayout getLinearLayout(){
    return linearLayout;
}

And then in your XMLParser.java, just do LinearLayout myLinearLayout = aobj.getLinearLayout() do the edits you want to the layout, then return it back to ClassAsyncTask via aobj.setLinearLayout(myLinearLayout).

这篇关于怎样才能的LinearLayout(LinearLayout中)在我的班级可见?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆