Java 未从AsyncTask/onPostExecute调用重载ArrayAdapter中的getView

Java 未从AsyncTask/onPostExecute调用重载ArrayAdapter中的getView,java,android,android-asynctask,android-arrayadapter,Java,Android,Android Asynctask,Android Arrayadapter,嗨,这是我在这里的第一篇帖子,也是我在安卓手机上的第一个稍微高级一点的应用。。。我知道这里提到了这个主题,谷歌知道很多例子,但它们并不完全是我所看到的形式;( 我承认我是n00000b…就Android编码而言…我开始…就在几天前,请原谅我:) 问题是我的listview元素没有被填充。应用程序编译和运行时没有错误,但它不支持getView。从我在网上看到的。。。我需要这个来显示我心爱的listview及其内容 请帮忙:) package com.test.stackParser; 公共类Sta

嗨,这是我在这里的第一篇帖子,也是我在安卓手机上的第一个稍微高级一点的应用。。。我知道这里提到了这个主题,谷歌知道很多例子,但它们并不完全是我所看到的形式;(

我承认我是n00000b…就Android编码而言…我开始…就在几天前,请原谅我:)

问题是我的listview元素没有被填充。应用程序编译和运行时没有错误,但它不支持getView。从我在网上看到的。。。我需要这个来显示我心爱的listview及其内容

请帮忙:)

package com.test.stackParser;
公共类StackParseActivity扩展活动{
/**在首次创建活动时调用*/
私营部门;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//最终文本视图电视=(文本视图)findViewById(R.id.textView1);
//setMovementMethod(新的ScrollingMovementMethod());
按钮按钮=(按钮)findViewById(R.id.button1);
setOnClickListener(myListener);
}
私有OnClickListener myListener=新OnClickListener(){
公共void onClick(视图v){
pd=ProgressDialog.show(stackParseActivity.this,“工作…”,“请求服务器”,true,false);
新建ParseSite()。执行(“http://multikino.pl/pl/repertuar/warszawa-ursynow/2011-09-02/");
}
};
私有类ParseSite扩展异步任务{
受保护列表doInBackground(字符串…arg){
列表输出=新的ArrayList();
尝试
{
HtmlHelper hh=新的HtmlHelper(新URL(arg[0]);
列表链接=hh.getLinksByClass(“标题”);
for(Iterator Iterator=links.Iterator();Iterator.hasNext();)
{
TagNode divElement=(TagNode)迭代器.next();
add(divElement.getText().toString());
}
Log.d(“dupa”,“站点解析”);
}
捕获(例外e)
{
e、 printStackTrace();
}
返回输出;
}
受保护的void onPostExecute(列表输出){
pd.解散();
Log.d(“dupa”、“后期执行”);
ListView ListView=(ListView)findViewById(R.id.listViewData);
//setAdapter(新的ArrayAdapter(stackParseActivity.this,android.R.layout.simple_list_item_1,output));
MyAdapter dupa=新的MyAdapter(stackParseActivity.this,android.R.layout.simple\u list\u item\u 1,R.id.movieTitle,output);
dupa.notifyDataSetChanged();
setAdapter(dupa);
dupa.notifyDataSetChanged();
}
}
私有类MyAdapter扩展了ArrayAdapter{
字符串[]tabObj;
公共MyAdapter(上下文上下文、int资源、int textViewResourceId、列表输出){
超级(上下文、资源、textViewResourceId);
tabObj=output.toArray(新字符串[]{});
Log.d(“dupa”,tabObj[2].toString());
notifyDataSetChanged();
//TODO自动生成的构造函数存根
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//TODO自动生成的方法存根
Log.d(“dupa”,“!!!!getView”);
LayoutFlater充气器=(LayoutFlater)getSystemService(Context.LAYOUT\u充气器\u服务);
视图行=充气机。充气(R.layout.row_layout,parent,false);
TextView tv=(TextView)row.findViewById(R.id.movieTitle);
tv.setText(tabObj[position]);
//Button buton1=(Button)row.findViewById(R.id.buttonInfo);
//Button button2=(按钮)行。findViewById(R.id.buttonReserve);
返回super.getView(position、convertView、parent);
}
};

}

由于您在PostExecute上设置了适配器,因此无需在您调用它的任何位置设置notifyDataChanged


使用notifyDataChanged的原因是通知已设置为listview的适配器数据已更改,您应该对其进行更新。希望这有帮助

getView
方法返回
row
。同时从
MyAdapter
构造函数中删除
notifyDatasetChanged()

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    Log.d("dupa", "!!!!getView");

    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View row = inflater.inflate(R.layout.row_layout,parent,false);
    TextView tv = (TextView) row.findViewById(R.id.movieTitle);         

    tv.setText(tabObj[position]);

    //Button buton1 = (Button) row.findViewById(R.id.buttonInfo);
    //Button button2 = (Button) row.findViewById(R.id.buttonReserve);

    return row;
}
编辑: 尝试覆盖适配器中的
getCount
,在那里返回
tabObj

私有类MyAdapter Extendes ArrayAdapter的
size()
{
private class MyAdapter extends ArrayAdapter<string> {

    String[] tabObj;

    public MyAdapter(Context context, int resource, int textViewResourceId, List<String> output) {
        super(context, resource, textViewResourceId);
        tabObj = output.toArray(new String[]{});
字符串[]tabObj; 公共MyAdapter(上下文上下文、int资源、int textViewResourceId、列表输出){ 超级(上下文、资源、textViewResourceId); tabObj=output.toArray(新字符串[]{});
创建自定义arrayadapter时,必须使用

public ArrayAdapter (Context context, int textViewResourceId, T[] objects)

public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

public ArrayAdapter (Context context, int textViewResourceId, List<T> objects)

public ArrayAdapter (Context context, int resource, int textViewResourceId, List<T> objects)
publicArrayAdapter(上下文上下文,int textViewResourceId,T[]对象)
公共ArrayAdapter(上下文上下文、int资源、int textViewResourceId、T[]对象)
公共ArrayAdapter(上下文上下文、int textViewResourceId、列表对象)
公共ArrayAdapter(上下文上下文、int资源、int textViewResourceId、列表对象)
如果我们不使用上述适配器,我们需要重写
getCount()
方法

就你而言,
super(上下文、资源、textViewResourceId、输出);

将解决您的问题。

我怀疑,添加notifyDataChanged没有帮助…这是我的绝望行为:/从onPostExecute和适配器的构造函数中同时删除。如果仍然无法正常工作,您是否会收到任何错误?列表的大小是否>0?在删除所有“notifyDataChanged()后仍然无法正常工作)'Log.d('dupa',tabObj[2].toString());在DDMS中显示正确的数据,因此是的,列出'output'>0,数组'tabObj'大于0。我按照您的建议更改了代码。我现在返回行,删除了所有notifyDatasetChanged(),但仍然没有任何内容。getView方法没有午餐。Log.d('dupa',“!!getView”);不输出任何要记录的内容:/sh您
public ArrayAdapter (Context context, int textViewResourceId, T[] objects)

public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

public ArrayAdapter (Context context, int textViewResourceId, List<T> objects)

public ArrayAdapter (Context context, int resource, int textViewResourceId, List<T> objects)