我想更改我在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;
}
}
答案 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
方法中与子视图进行互动。请发布此课程,并向您展示如何与您的孩子观点互动。