a如何从Listview获取子视图

时间:2014-07-28 20:24:59

标签: android listview

我想更改我在App启动时创建的ListView的子视图。我写了这段代码但是没有用!我怎么能这样做?

因为更多的代码不允许我发帖。因为更多的代码不允许我发帖。因为更多的代码不允许我发帖。因为更多代码don& #39; t让我发帖。因为更多的代码不允许我发帖。因为更多的代码不允许我发帖。

ArrayList results = new ArrayList();

        ni=new Aye[text.returnString().length];  
            for(int i=0;i<text.returnString().length;i++){
                ni[i]=new Aye(Sura.this);
                ni[i].setarabic(getIntent().getExtras().getString("namesura").toString());
                ni[i].setarabic(text.returnString()[i]);
                ni[i].setnonarabic(ttext.returnString()[i]);
                tbstate=sp.getBoolean("a"+i, false);
                ni[i].setSelected(tbstate);

                results.add(ni[i]);
            }

        ArrayList image_details = results;
        lv1.setAdapter(new CustomListAdapter(this, image_details));
        for(int i=0;i<ni.length;i++){       
        if(ni[i].isSelected()){
            lv1.getAdapter().getView(i, null, lv1).setBackgroundResource(R.drawable.selected);
            }
        } 

自定义ListAdapter类

package ir.aiga.apps.quran;

import java.util.ArrayList;

import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class CustomListAdapter extends BaseAdapter {

    private ArrayList listData;
    private Typeface tf;
    private LayoutInflater layoutInflater;

    public CustomListAdapter(Context context, ArrayList listData) {
        this.listData = listData;
        layoutInflater = LayoutInflater.from(context);
        tf=Typeface.createFromAsset(context.getAssets(), "qt.ttf");
    }

    @Override
    public int getCount() {
        return listData.size();
    }

    @Override
    public Object getItem(int position) {
        return listData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.list_row_layout, null);
            holder = new ViewHolder();

            holder.tv_arabic=(TextView) convertView.findViewById(R.id.tv_arabic);
            holder.tv_nonarabic=(TextView) convertView.findViewById(R.id.tv_nonarabic);
            holder.tv_number=(TextView) convertView.findViewById(R.id.tv_number);
            holder.tv_arabic.setTextColor(Color.BLACK);
            holder.tv_nonarabic.setTextColor(Color.BLACK);
            holder.tv_number.setTextColor(Color.BLACK);
            holder.tv_arabic.setTypeface(tf);
            holder.tv_number.setTypeface(tf);
            holder.tv_arabic.setTextSize(25);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        Aye aye = (Aye)listData.get(position);
        aye.setNumber(position);
        holder.tv_arabic.setText(aye.getarabic());
        holder.tv_nonarabic.setText(aye.getnonarabic());
        holder.tv_number.setText(1+aye.getNumber()+"");


        return convertView;
    }

    static class ViewHolder {
        TextView tv_arabic;
        TextView tv_nonarabic;
        TextView tv_number;
    }

}

2 个答案:

答案 0 :(得分:1)

ListView中包含Views,因此您只需在其中获取要更改的子视图。你可以使用

lv1.getChildAt(i).setBackgroundResource(R.drawable.selected);

如果这在onCreate()中,那么您可能需要将Runnable发布到ListView才能生效,因为View尚未完全绘制。所以你会做类似

的事情
lv1.post(new Runnable()
{
    @Override
    public void run()
    {
        lv1.getChildAt(i).setBackgroundResource(R.drawable.selected);
    }
});

我做了类似的事情,但改变了它,因为它最终变得丑陋,我找到了更好的方法。我不确定它在loop中是如何工作的,但你可以试试。

但是,由于您似乎使用自定义适配器,您还可以通过覆盖适配器getView()方法来更改所需内容。尝试使用

添加它
Aye aye = (Aye)listData.get(position);

//add it here in getView()
if (aye.isSelected()) 
    convertView.setBackgroundResource(R.drawable.selected);

aye.setNumber(position);

答案 1 :(得分:0)

您应该在getView()课程的CustomListAdapter方法中与子视图进行互动。请发布此课程,并向您展示如何与您的孩子观点互动。