【问题标题】:How to change style of specific rows in android ListView如何更改android ListView中特定行的样式
【发布时间】:2015-11-03 20:09:38
【问题描述】:

我的应用程序中有一个列表视图,它在 XML 中声明,然后根据我在 XML 中声明的字符串数组在代码中将内容传递给它。我是 android 编程新手,但我想知道如何使某些列表视图元素中的文本 bold 并将其背后的列表视图背景变暗。

我在我的 strings.xml 中将我的集合名称作为一个数组:

<string-array name="setsArray">
    <item>set1</item>
    <item>set2</item>
    <item>set3</item>
    <item>set4</item>
    <item>set5</item>
    <item>set6</item>
</string-array>

我在活动的 layout.xml 中声明了我的列表视图

    <ListView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/listView"
    android:layout_below="@+id/app_bar"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

在活动的代码中我有这个:

final ListView setList = (ListView) findViewById(R.id.listView);

    setList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.setsArray)));

    setList.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            int itemPosition = position;

            String itemValue = (String) setList.getItemAtPosition(itemPosition);

            if (!itemValue.equals("SPANISH")){

                Intent intent = new Intent(view.getContext(), SetViewActivity.class);
                intent.putExtra("value", itemValue);
                startActivity(intent);

            }

        }

    });

请注意,此代码采用被点击的集合的名称,并将其传递给具有意图的下一个活动,以便它知道要显示什么。如果可能的话,我需要保持这个完整或用另一个系统替换它,该系统发送一些我可以用来区分下一个活动中的集合。

【问题讨论】:

    标签: java android xml listview android-listview


    【解决方案1】:

    因为你不使用自定义适配器(我猜),请试试这个:

     <string-array name="setsArray">
     <item>set1</item>
     <item>set2</item>
     <item>set3</item>
     <item>set4</item>
     <item>  <![CDATA[ <b>set5</b>  ]]>  </item>
     <item>set6</item>
     </string-array>
    

    我希望android默认使用Html.fromHtml() :)

    Android:Make characters bold in xml

    【讨论】:

    • 默认不工作。我将如何实施 yourWidget.setText(Html.fromHtml(getString(R.string.Help)));在我的 ListView 中,因为 ArrayAdapter 不想接受 HTML 输入?
    【解决方案2】:

    请关注The World of ListView。它解释了 ListView 的重要方面以及如何为您的 ListView 制作适配器。特别注意使用getItemViewType()getViewTypeCount()的部分。

    【讨论】:

      【解决方案3】:

      我认为您必须实现自定义ListAdapter。在getView() 方法中,您将能够根据索引更改项目的样式。

      作为旁注,我看不出您不使用RecyclerView 的原因。这是创建列表的更灵活和最新的选择。

      使用 RecyclerView 可以这样做:

       @Override
          public void onBindViewHolder(ViewHolder holder, int position) {
              // - get element from your dataset at this position
              // - replace the contents of the view with that element
              holder.mTextView.setText(mDataset[position]);
              if(position == 5) holder.mTextView.setTypeface(null, Typeface.BOLD);    
          }
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2015-07-28
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      • 2015-09-27
      相关资源
      最近更新 更多