简体   繁体   English

将新的TextView添加到ListView

[英]Add new TextView to ListView

I want to add new TextView to my ListView which is already in my XML file. 我想将新的TextView添加到XML文件中已经存在的ListView中。 Just before add them, I setText() with static String[]. 在添加它们之前,我用静态String []设置了setText()。 I've tried a lot of solutions but I got sometimes an exception about TextView id, and other times this one: 我已经尝试了很多解决方案,但是有时我会遇到一个关于TextView id的例外,而有时却是这样:

04-20 14:51:57.139 8034-8034/com.example.irit.myapp E/AndroidRuntime: FATAL EXCEPTION: main
  Process: com.example.irit.myapp, PID: 8034
  java.lang.UnsupportedOperationException: addView(View) is not supported in AdapterView
      at android.widget.AdapterView.addView(AdapterView.java:700)
      at com.example.irit.myapp.Model.ListObjet.creatView(ListObjet.java:65)
      at com.example.irit.myapp.Model.ListObjet.access$100(ListObjet.java:31)
      at com.example.irit.myapp.Model.ListObjet$1.onClick(ListObjet.java:50)
      at android.view.View.performClick(View.java:5697)
      at android.view.View$PerformClick.run(View.java:22526)
      at android.os.Handler.handleCallback(Handler.java:739)
      at android.os.Handler.dispatchMessage(Handler.java:95)
      at android.os.Looper.loop(Looper.java:158)
      at android.app.ActivityThread.main(ActivityThread.java:7224)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

My class: 我的课:

public class ListObjet{
    private ImageButton mButton;
    private EnvoiMailActivity mEnvoiMailActivity;
    private LayoutInflater inflater;
    private ListView mList;
    private int ressource;

    public ListObjet(EnvoiMailActivity pEnvoiMailActivity, int resourceId) {
        this.ressource = resourceId;
        this.mEnvoiMailActivity = pEnvoiMailActivity;
        this.inflater = LayoutInflater.from(mEnvoiMailActivity);

        this.mList = (ListView) inflater.inflate(this.ressource, null);
        this.mButton = (ImageButton) mEnvoiMailActivity.findViewById(R.id.listobjet);
        this.mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder myList = new AlertDialog.Builder(mEnvoiMailActivity);

                myList.setView(creatView());
                AlertDialog alert = myList.create();
                alert.show();
            }
        });
    }


    private View creatView(){
        ScrollView mScrollView = new ScrollView(mEnvoiMailActivity);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(mEnvoiMailActivity, this.ressource, Conf.OBJET_PROPOSE);
        this.mList.setAdapter(adapter);
        for (int i = 0; i < Conf.OBJET_PROPOSE.length; i++ ) {
            TextView item = new TextView(mEnvoiMailActivity);
            item.setText(Conf.OBJET_PROPOSE[i]);
            mList.addView(item);
        }
        mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //todo
            }
        });
        mScrollView.addView(mList);


        return mScrollView;
    }
}

I changed my code: 我更改了代码:

private View creatView(){
    ScrollView mScrollView = new ScrollView(mEnvoiMailActivity);
    ArrayAdapter<TextView> adapter = new ArrayAdapter<TextView>(mEnvoiMailActivity, this.ressource);
    this.mList.setAdapter(adapter);
    for (int i = 0; i < Conf.OBJET_PROPOSE.length; i++ ) {
        TextView item = new TextView(mEnvoiMailActivity);
        item.setText(Conf.OBJET_PROPOSE[i]);
        adapter.add(item);
    }

This exception occured: 发生此异常:

04-20 15:07:51.819 32350-32350/com.example.irit.myapp E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.irit.myapp, PID: 32350
    java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
        at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:393)
        at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369)
        at android.widget.AbsListView.obtainView(AbsListView.java:2929)
        at android.widget.ListView.onMeasure(ListView.java:1180)
        at android.view.View.measure(View.java:20151)
        at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:2104)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.widget.ScrollView.onMeasure(ScrollView.java:510)
        at android.view.View.measure(View.java:20151)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.view.View.measure(View.java:20151)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.view.View.measure(View.java:20151)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:747)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:629)
        at android.view.View.measure(View.java:20151)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.view.View.measure(View.java:20151)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at android.view.View.measure(View.java:20151)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
        at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:3158)
        at android.view.View.measure(View.java:20151)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2594)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1524)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1841)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1437)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7397)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:920)
        at android.view.Choreographer.doCallbacks(Choreographer.java:695)
        at android.view.Choreographer.doFrame(Choreographer.java:631)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:906)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:158)
        at android.app.ActivityThread.main(ActivityThread.java:7224)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
     Caused by: java.lang.ClassCastException: android.widget.ListView cannot be cast to android.widget.TextView
        at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:386)
        at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369) 
        at android.widget.AbsListView.obtainView(AbsListView.java:2929) 
        at android.widget.ListView.onMeasure(ListView.java:1180) 
        at android.view.View.measure(View.java:20151) 
        at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:2104) 
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
        at android.widget.ScrollView.onMeasure(ScrollView.java:510) 
        at android.view.View.measure(View.java:20151) 
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328) 
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
        at android.view.View.measure(View.java:20151) 
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328) 
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
        at android.view.View.measure(View.java:20151) 
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328) 
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1464) 
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:747) 
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:629) 
        at android.view.View.measure(View.java:20151) 
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328) 
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
        at android.view.View.measure(View.java:20151) 
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328) 
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
        at android.view.View.measure(View.java:20151) 
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6328) 
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) 
        at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:3158) 
        at android.view.View.measure(View.java:20151) 
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2594) 
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1524) 
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1841) 
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1437) 
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7397) 
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:920) 
        at android.view.Choreographer.doCallbacks(Choreographer.java:695) 
        at android.view.Choreographer.doFrame(Choreographer.java:631) 
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:906) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:158) 
        at android.app.ActivityThread.main(ActivityThread.java:7224) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

Instead of assigning TextView dynamically, just pass id of layout which contains on TextView . 无需动态分配TextView ,只需传递TextView上包含的layout的ID。 You can create custom layout having only TextView or you can use default template layout provided by android sdk itself. 您可以创建仅具有TextView自定义布局,也可以使用android sdk本身提供的默认模板布局。 example: 例:

android.R.layout.simple_list_item_1

full example: 完整的例子:

ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(context,android.R.layout.simple_list_item_1,list);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM