我有自定义ListView,包含60个项目,我有3个不同的行设计,3行包含相同的textView,但这里有不同的背景是更好地理解它的xmle代码:
<TextView
android:id="@+id/abilityBlue"
android:layout_width="150dp"
android:layout_height="25dp"
android:layout_gravity="center"
android:gravity="left|center_vertical"
android:paddingLeft="23dp"
android:paddingRight="1dp"
android:textSize="12sp"
android:textStyle="bold"
android:textColor="@android:color/white"
android:background="@drawable/ability_blue_btn"/>
<TextView
android:id="@+id/abilityGreen"
android:layout_width="150dp"
android:layout_height="25dp"
android:layout_gravity="center"
android:gravity="left|center_vertical"
android:paddingLeft="23dp"
android:paddingRight="1dp"
android:textSize="12sp"
android:textStyle="bold"
android:textColor="@android:color/white"
android:background="@drawable/ability_green_btn"/>
<TextView
android:id="@+id/abilityYellow"
android:layout_width="150dp"
android:layout_height="25dp"
android:layout_gravity="center"
android:gravity="left|center_vertical"
android:paddingLeft="23dp"
android:paddingRight="1dp"
android:textSize="12sp"
android:textStyle="bold"
android:textColor="@android:color/white"
android:background="@drawable/ability_yellow_btn"/>
所以我想知道如何使用不同的textview为每个20个项目做一个示例。 感谢
我的适配器:
class Ability extends ArrayAdapter<String>
{
Context context;
String[] titleArray;
Ability(Context c,String[] Names)
{
super(c,R.layout.ability_btn,R.id.abilityBlue,Names);
this.context=c;
this.titleArray=Names;
}
class MyViewHolder
{
TextView myText;
MyViewHolder(View v)
{
myText = (TextView) v.findViewById(R.id.abilityBlue);
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View row = convertView;
MyViewHolder holder = null;
if(row==null)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.ability_btn, parent, false);
holder = new MyViewHolder(row);
row.setTag(holder);
}
else
{
holder = (MyViewHolder) row.getTag();
}
holder.myText.setText(titleArray[position]);
return row;
}
}
答案 0 :(得分:1)
只需使用一个TextView作为自定义行。
类似的东西:
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ability"
android:layout_width="150dp"
android:layout_height="25dp"
android:layout_gravity="center"
android:gravity="left|center_vertical"
android:paddingLeft="23dp"
android:paddingRight="1dp"
android:textSize="12sp"
android:textStyle="bold"
android:textColor="@android:color/white"
android:background="@drawable/ability_blue_btn"
/>
然后,在适配器中(在getView()
方法中),如果索引是&gt; 40 (41+)然后将其背景资源设置为黄色; 其他,如果,则&gt; 20 (21+),将其背景资源设置为绿色
否则(1 - 20)不要改变它(蓝色)。
这样的事情:
final TextView txtAbility = (TextView) v.findViewById(R.id.ability);
// Change the item color
// This one is based on the TextView's text value, since mine was a game score.
// You can change the int ability to match the item position.
final int ability = Integer.parseInt((String) txtAbility.getText());
if (ability > 40)
{
txtAbility.setBackgroundResource(R.drawable.ability_yellow_btn);
}
else
if (ability > 20)
{
txtAbility.setBackgroundResource(R.drawable.ability_green_btn);
}
}
很简单。只需if ... elseif
<强> [编辑] 强>
您的代码:
holder.myText.setText(titleArray [位置]);
将其更改为:
holder.myText.setText(titleArray[position]); // same as yours, just add the lines below.
// Change the item color
if (position > 39) // position starts at 0
{
holder.myText.setBackgroundResource(R.drawable.ability_yellow_btn);
}
else
if (position > 19) // position starts at 0
{
holder.myText.setBackgroundResource(R.drawable.ability_green_btn);
}
}
答案 1 :(得分:0)
这是一个完整的例子
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = (ListView) findViewById(R.id.listView);
ArrayList<String> arr = new ArrayList<String>();
for (int i = 0 ; i<60; i++)
{
arr.add("test"+String.valueOf(i));
}
CustomAdapter adapter = new CustomAdapter(this , R.layout.activity_main , arr);
lv.setAdapter(adapter);
}
}
custom_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/tvtextView" />
</LinearLayout>
activity_main.xml中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/listView"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true" />
</RelativeLayout>
CustomAdapter
package com.example.nayraahmed.stackoverflow;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import java.util.ArrayList;
public class CustomAdapter extends ArrayAdapter<String> {
ArrayList<String> Info;
private Context context;
CustomAdapter(Context context, int resource, ArrayList<String> objects) {
super(context, resource, objects);
// TODO Auto-generated constructor stub
this.context = context;
Info = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
EventItemHolder eventHolder;
View view = convertView;
if (view == null) {
eventHolder = new EventItemHolder();
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
view = inflater.inflate(R.layout.custom_row, parent, false);
eventHolder.title = (TextView) view.findViewById(R.id.tvtextView);
view.setTag(eventHolder);
} else {
eventHolder = (EventItemHolder) view.getTag();
}
String eItem = (String) this.Info.get(position);
if(position < 20)
eventHolder.title.setBackgroundColor(Color.RED);
else if(position>=20 && position<40)
eventHolder.title.setBackgroundColor(Color.BLUE);
else
eventHolder.title.setBackgroundColor(Color.GREEN);
eventHolder.title.setText(eItem);
return view;
}
private static class EventItemHolder {
TextView title;
}
}
希望它能帮助