首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用AsyncTask和片段,ArrayAdapter要求资源ID为TextView

使用AsyncTask和片段,ArrayAdapter要求资源ID为TextView
EN

Stack Overflow用户
提问于 2015-01-22 16:08:04
回答 3查看 214关注 0票数 1

如何实现AsyncTask我有片段,我应该在行中写些什么

代码语言:javascript
复制
listview = (ListView) ?????? findViewById(R.id.listviewget);

如果我把它放进onCreateView

代码语言:javascript
复制
 listview = (ListView) veiw.findViewById(R.id.listviewget);

我得到了错误的below.All代码工作,因为我已经签入了活动,它从服务器获得数据,但不能在片段中工作。

01-22 21:59:32.850: E/ ArrayAdapter (32155):您必须为android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:上的TextView 01-22 21:59:32.890: e/AndroidRuntime(32155)提供资源ID :主01-22 21:59:32.890: E/AndroidRuntime(32155):java.lang.IllegalStateException: ArrayAdapter要求资源ID为TextView 01-22 21:59:32.890: E/AndroidRuntime(32155):at(32155):在android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 01-22 21:32.890: E/AndroidRuntime(32155):在android.widget.AbsListView.obtainView(AbsListView.java:2075) 01-22 21:32.890: E/AndroidRuntime(32155):android.widget.ListView.makeAndAddView(ListView.java:2004) 01-22 21:59: 59:59:59:59:59:59:59:59:59:32.890: E/AndroidRuntime(32155):在android.widget.ListView.fillDown(ListView.java:856) 01-22 21:59:32.890: E/AndroidRuntime(32155):在android.widget.ListView.fillFromTop(ListView.java:916) 01-22 21:32.890: E/AndroidRuntime(32155):android.widget.ListView.layoutChildren(ListView.java:1857) 01-22 21:59:32.890: E/AndroidRuntime(32155 )):android.widget.AbsListView.onLayout(AbsListView.java:1905) 01-22 21:59:32.890: E/AndroidRuntime(32155):android.view.View.layout(View.java:11359) 01-22 21:32.890: E/AndroidRuntime(32155):at android.view.ViewGroup.layout(ViewGroup.java:4531) 01-22 21:59:32.890: E/AndroidRuntime(32155):at android.widget.RelativeLayoutandroid.view.ViewGroup.layout(ViewGroup.java:4531) (RelativeLayout.java:925) 01-22 21:32.890: E/AndroidRuntime(32155):android.view.View.layout(View.java:11359) 01-22 21:32.890: E/AndroidRuntime(32155):at RelativeLayout.java:925 01-22 21:59:32.890: E/AndroidRuntime(32155):at android.widget.FrameLayout.onLayout(FrameLayout.java:431) 01-22 21:59:32.890: E/AndroidRuntime(32155):at android.view.View.layout(View.java:11359) 01-22 21:59:32.890: E/AndroidRuntime(32155):at android.view.View.layout 01-22 21:59:32.890: E/AndroidRuntime(32155):at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:801) 01-22 21:59:32android.view.ViewGroup.layout(ViewGroup.java:4531):E/AndroidRuntime(32155):android.view.View.layout(View.java:11359) 01-22 21:32.890: E/AndroidRuntime(32155):at .890 01-22 21:59:32.890: E/AndroidRuntime(32155):at android.widget.FrameLayout.onLayout(FrameLayout.java:431) 01-22 21:59:32.890: E/AndroidRuntime(32155):在android.view.ViewGroup.layout(ViewGroup.java:4531) 01-22 21:32.890: E/AndroidRuntime(32155):at android.view.View.layout 01-22 21:32.890: E/AndroidRuntime(32155):at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1628) 01-22 21:59:32.890: E/AndroidRuntime(32155):at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1486) 01-22 21:32.890: E/AndroidRuntime(32155):在android.widget.LinearLayout.onLayout(LinearLayout.java:1399) 01-22 21:32.890: E/AndroidRuntime(32155):at android.view.View.layout(View.java:11359) 01-22 21:59:32.890: E/AndroidRuntime(32155):android.view.ViewGroup.layout(ViewGroup.java:4531) 01-22 21:59: 59:59:59:59:59:59:32.890: E/AndroidRuntime(32155):在android.widget.FrameLayout.onLayout(FrameLayout.java:431) 01-22 21:59:32.890: E/AndroidRuntime(32155):at android.view.View.layout(View.java:11359) 01-22 21:32.890: E/AndroidRuntime(32155):at android.view.ViewGroup.layout(ViewGroup.java:4531) 01-22 21:59:32.890: E/AndroidRuntime(32155):android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1665) 01-22 21:59:32.890: E/AndroidRuntime(32155):android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2695) 01-22 21:32.890: E/AndroidRuntime(32155):android.os.Handler.dispatchMessage(Handler.java:99) 01-22 21:59:32.890: E/AndroidRuntime(32155):at android.os.Looper。循环( android.app.ActivityThread.main(ActivityThread.java:4987) ) 01-22 21:59:32.890: E/AndroidRuntime(32155):at java.lang.reflect.Method.invoke(Method.java:511) 01-22 21:32.890: E/AndroidRuntime(32155):at java.lang.reflect.Method.invokeNative(原生方法) 01-22 21:59:32.890: E/AndroidRuntime(32155):at java.lang.reflect.Method.invoke(Method.java:511) 01-22 21:59:32.890: E/AndroidRuntime(32155):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 01-22 21:32.890: E/AndroidRuntime(32155):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 01-22 21:59:32.890: E/AndroidRuntime(32155):at dalvik.system.NativeStart.main(原生方法) 01-22 21:59: 59:59:59:59:59:59:59:32.890: E/AndroidRuntime(32155):由: java.lang.ClassCastException: android.widget.RelativeLayout无法转换为android.widget.TextView 01-22 21:59:32.890: E/AndroidRuntime(32155):at android.widget.TextView 01-22 21:59:32.890: E/AndroidRuntime(32155):. 39多39

代码语言:javascript
复制
public class MyLibrary  extends Fragment {
ListView listview;
List<ParseObject> data;
ProgressDialog mProgressDialog;
ArrayAdapter<String> adapter;


public MyLibrary()
{

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    Parse.initialize(getActivity(), "ASD", "ASD");
    ParseUser.enableAutomaticUser();
    ParseACL defaultACL = new ParseACL();
    defaultACL.setPublicReadAccess(true);
    ParseACL.setDefaultACL(defaultACL, true);
    View view=inflater.inflate(R.layout.getnewlay,container, false);
    new GetData().execute();
    return view;
}

private class GetData extends AsyncTask<Void, Void, Void> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mProgressDialog = new ProgressDialog(getActivity());
        mProgressDialog.setTitle("Please wait");
        mProgressDialog.setMessage("Getting data...");
        mProgressDialog.setIndeterminate(false);
        mProgressDialog.show();
    }

    @Override
    protected Void doInBackground(Void... params) {
        ParseQuery query = new ParseQuery("ASD");
        query.orderByDescending("_created_at");
        try {
            data= query.find();


        } catch (ParseException e) {

            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        listview = (ListView) ?????? findViewById(R.id.listviewget);

        adapter = new ArrayAdapter<String>(getActivity(),
                R.layout.getnewlay);
        for (ParseObject name : data) {
            adapter.add((String) name.get("name"));
        }
        listview.setAdapter(adapter);
        mProgressDialog.dismiss();

    }
}

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-22 16:16:34

ArrayAdapter要求资源ID为TextView

意味着R.layout.getnewlay布局包含TextView,但在RelativeLayout内部,因此您可以将任何id分配给TextView,并使用另一个需要TextView id的ArrayAdapter构造函数:

代码语言:javascript
复制
adapter = new ArrayAdapter<String>(getActivity(),
                R.layout.getnewlay,R.id.textView_Id);

或从xml中删除RelativeLayout布局,并使TextView成为根视图:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"    
    .....
/>

如何在onPostExecute方法中从片段布局访问视图:

使用getView方法:

代码语言:javascript
复制
listview = (ListView)getView().findViewById(R.id.listviewget);
票数 2
EN

Stack Overflow用户

发布于 2015-01-22 16:16:46

检查一下你的布局。它应该只有TextView作为布局中的父级(甚至没有任何布局,比如线性布局或相对布局)

否则,您可以将android.R.layout.simple_list_item_1替换为R.layout.getnewlay

票数 1
EN

Stack Overflow用户

发布于 2015-01-22 16:20:29

在布局'getnewlay‘中传递TextView的资源ID,类似

代码语言:javascript
复制
adapter = new ArrayAdapter<>(getActivity(), R.layout.getnewlay, R.id.textViewResourceId_in_getnewlay)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28093400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档