Управление отдельными представлениями в ListActivity - PullRequest
1 голос
/ 29 июня 2011

Я хочу, чтобы все элементы в списке, отображаемые с помощью ListActivity, были другого цвета (пожалуйста, не комментируйте плохой графический дизайн; я пытаюсь создать демонстрацию).,Однако, прочитав другие вопросы, я увидел, что вы не можете перебирать ListView.Итак, как вы можете управлять TextView для отдельных записей списка?

Вот мой пример программы;закомментированная область показывает код, который не работает.

package com.explorenm.colorlist;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class ColorList extends ListActivity {
    private static final String colors[] = {
        "red", "green", "blue", "cyan", "magenta",
        "yellow", "black", "white"
    };
    private static final int colorvalues[] = {
        // red,   green,    blue,     cyan,     
        0xFF0000, 0x00FF00, 0x0000FF, 0x00FFFF, 
        // magenta, yellow,   black,   white
        0xFF00FF, 0xFFFF00, 0x000000, 0xFFFFFF
    };
@Override
public void onCreate(Bundle savedInstanceState) {
    TextView tv = null;
    super.onCreate(savedInstanceState);
    setListAdapter(new ArrayAdapter<String>(this, R.layout.listitem, colors));
    ListView lv = getListView();
//    for (int i=0; i<colors.length; i++) {
//        tv = (TextView) lv.getItemAtPosition(i); // lv.getChildAt(i) also fails
//        tv.setBackgroundColor(colorvalues[i]);
//    }
    }
}

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Вы можете реализовать свой собственный ListAdapter (или, более конкретно, расширить ArrayAdapter<String>) и переопределить метод getView( int position, View convertView, ViewGroup parent).Это позволяет вам самим создавать представления для отдельных элементов списка, и поэтому вы можете делать с ними именно то, что вам нужно.

public class MyAdapter extends ArrayAdapter<String>
    public View getView( final int position, View convertView, final ViewGroup parent )
    {
        View v = convertView;
        if( v == null )
        {
            LayoutInflater li = (LayoutInflater)context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
            v = li.inflate( R.layout.listitem, null );
        }
        String getItem = getItem( position );
        // Style the item and set the text here
    }
}

Стоит отметить, что вы всегда должны пытаться использовать параметр convertView повторно, а не раздувать новое представление при каждом вызове этого метода.Причиной этого является то, что надувание вида является расходом, и выполнение этого без необходимости значительно повлияет на плавную прокрутку вашего ListView.

0 голосов
/ 29 июня 2011

надеюсь, что это поможет ..

MyList.class

public class MyList extends Activity implements OnItemClickListener {

private List<String> strings = new ArrayList<String>();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    strings.add("Android");
    strings.add("Android");
    strings.add("Android");
    strings.add("Android");
    strings.add("Android");
    strings.add("Android");
    strings.add("Android");
    strings.add("Android");
    ListView listView = (ListView) findViewById(R.id.list);
    listView.setAdapter(new MyArrayAdatpter(getApplicationContext(), 0,
            strings));
    listView.setOnItemClickListener(this);
}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    Toast.makeText(getApplicationContext(), strings.get(arg2)+" at position-"+arg2,
            Toast.LENGTH_SHORT).show();
}
}   

пользовательский ArrayAdapter

public class MyArrayAdatpter extends ArrayAdapter<String>{

private List<String> list=new ArrayList<String>();
private Context context;
private int randomColour;
private static final int colorvalues[] = {
    // red,   green,    blue,     cyan,     
    Color.RED, Color.GREEN, Color.BLUE, Color.CYAN, 
    // magenta, yellow,   black,   white
    Color.MAGENTA, Color.YELLOW, Color.BLACK, Color.WHITE
};
public MyArratAdatpter(Context applicationContext, int i,   List<String> strings) {
    super(applicationContext,i);
    this.context=applicationContext;
    list=strings;
}
@Override
public int getCount() {
    // TODO Auto-generated method stub
    return list.size();
}

@Override
public String getItem(int position) {
    // TODO Auto-generated method stub
    return list.get(position);
}
@Override
public int getPosition(String item) {
    // TODO Auto-generated method stub
    return list.indexOf(item);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view=LayoutInflater.from(context).inflate(R.layout.textlayout,null);
    TextView textView=(TextView)view.findViewById(R.id.text);
    textView.setText(list.get(position));
    randomColour = new Random().nextInt(7);
    textView.setTextColor(colorvalues[randomColour]);
    return view;
}   
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...