【问题标题】:How to add A TextView Dynamically in the ListView Items Android?如何在 ListView Items Android 中动态添加 TextView?
【发布时间】:2013-08-14 10:09:44
【问题描述】:

我想添加一个 TextView 并在 ListView 中动态设置它的值,并且在单击项目时我想获取所单击项目的值。

我有一个数组

String[] statesList = {"listItem 1", "listItem 2", "listItem 3"};

我的 TextView XML 是

<?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="fill_parent"
    android:padding="10dp" 
    android:textSize="16sp" 
    android:textStyle="bold" 
    >
</TextView>

我的 ListView XML

 <ListView
            android:id="@+id/list"
            android:choiceMode="singleChoice"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dp"
            android:layout_marginTop="10dp"
            android:layout_width="290dp"/>

请帮助我如何将数组中的这些值设置为列表视图。我是 android 的新手。谢谢

【问题讨论】:

  • 每一行都有一个文本视图?
  • 是的,每个项目将只有一个文本视图,其中包含来自数组的文本
  • 不是每次都添加更多的文本视图,而是一种不好的做法,并且会消耗大量内存。每次你想添加一个新的文本视图时,只需使用一个文本视图并将\n 添加到text。希望这会有所帮助。
  • @user2652394 和你说的一样,我想这样做我该怎么做,请帮助我

标签: android android-layout android-listview


【解决方案1】:

使用这个代码我希望这是你想要的

public void showstatesList() {
        listView = (ListView) findViewById(R.id.list);
        String[] statesList = {"listItem 1", "listItem 2", "listItem 3"};
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                  android.R.layout.simple_list_item_1, android.R.id.text1, statesList);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new OnItemClickListener() {
              @Override
              public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
                int itemPosition     = position;
                String  itemValue    = (String) listView.getItemAtPosition(position);

//              Toast.makeText(getApplicationContext(),
//                "Position :"+itemPosition+"  ListItem : " +itemValue , Toast.LENGTH_LONG)
//                .show();
              }
        });
}

【讨论】:

    【解决方案2】:

    希望对你有帮助..

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
        TextView tv;
        ListView lv;
          String s="";
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
             tv=(TextView) findViewById(R.id.textView1);
             lv=(ListView) findViewById(R.id.listView1);
    
            String value[]={"asda","Ansar","Nisam"};
            ArrayAdapter<String>adapter=new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_list_item_1,android.R.id.text1,value);
            lv.setAdapter(adapter);
    //list item click
                lv.setOnItemClickListener(new OnItemClickListener() {
    
                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                            long arg3) {
                         s=s+("\n")+((String) lv.getItemAtPosition(arg2));
                        tv.setText(s);
                    }
    
                });
    
        }
    

    【讨论】:

      【解决方案3】:

      创建一个 ListView 是一件容易的事。您所做的就是创建: -XML 代码: --在你的主 XML 文件中创建一个元素,包含它的大小、id 属性:

       <ListView 
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:id="@+id/mainList"
      
                      />
      

      --另一个 XML 文件,你想制作你的列表元素的形式,比如你的 textView 的 from 等。在“布局”文件中:

       elementsForm.xml : 
      

      例如,如果您想列出国家/地区, 所以创建一个 LinearLayout 来放置文本

      在“android:orientation”属性中带有“垂直”值的表格 在其中创建您的 TextView :

       <TextView 
      
      
         android : layout_width="match_parent"
         android : layout_height="wrap_content"
         android : textSize="25sp"
         android : id="@+id/texty"
          />
      

      在您的 JAVA 文件“MainClass”中:

      --创建一个内部类并让它继承自ArrayAdapter 并创建一个带有 2 个参数的构造函数:第一个类型是 Context ,第二个 Type 是您想要显示并传递的数据类型 超级构造函数(ArrayAdapter)的三个值:

      1th:你自己的类所采用的上下文

      2th : 你自己的 XML 文件将包含并显示文本视图、音频视图等值...

      3th:我们想要显示的值数组,我们的类将其作为其构造函数的第二个参数

      ::

      public class MyOwnInnerClass extends ArrayAdapter<String>{
      public MyOwnInnerClass(Context context, String countries[]){
      super(cotext , R.layout. , countries);
      

      现在在您的类中覆盖采用

      的 getView() 方法
      @Override 
      getView(int pos , View convert  , ViewGroup vg);
      

      它包含三个参数,可以提供元素位置并在我们自己的 XML 文件中制作元素 和 parent 作为对父 View 的引用: 现在对这个方法放轻松,做你的目的: 膨胀你的名单:

      LayoutInflater li = LayoutInflater.from(getContext());

      :我们传递到将要使用的外类的上下文

       convert = li.inflate(parent , R.layout.elementsForm,false);
      

      我们将 inflate li 对象函数传递给 getView() 方法的 View 参数,并传递给 3 个值 第一个:我们自己的XML文件ID; 第二个:父 ViewGroup 的实例; 第三个:我们通过 false ;

      现在我们必须使用 getItem 函数将 getItems 传递给位置参数:

      String st = getItem(position);
      

      创建 TextView 对象并使用转换参数传递给您的 xml:

      TextView tv  = convert.findViewById(R.id.texty);
      

      然后将 Text 设置为您自己的文本视图:

      tv.setText(st); 
      

      现在不要忘记最重要的声明:return Type 方法:return convert;

      ------------------------------------- --

      这里我们回到我们的“MainClass”,我们创建 ListView 实例,ListAdapter 实例:

      `ListView lv ; ListAdapter la ;

      ` 和 onCreate 方法内部:

       0)String [] countries = {"US" , "Canada","Egypt","China"};
      
      
       1) lv = findViewById(R.id.mainList);
      
      
       2) la = new MyOwnInnerClass(MainClass.this,countries);
      

      0) 我们定义了一个名为 countries 的字符串数组,其中包含我们想要显示的四个值。

      1) 在这里,我们将元素“ListView”的 ID 传递给 lv 对象,该 ID 将包含国家值和视图文本;

      2)我们传递了一个匿名类,它的构造函数有两个参数,第一个是主类的上下文,第二个是我们想要显示的值

      最后一个操作将我们的 ListView 元素与我们自己的 ListView 适配器连接起来 “D”类:

      正在声明这个函数:

       lv.setAdapter(la);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-29
        • 1970-01-01
        • 2011-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多