ListView内容的问题(viewHolder不改变里面的视图)

时间:2016-04-20 22:44:59

标签: java android listview

我一直在寻找我的问题的答案,我找到了类似的条目并修复了一些问题但不是主要问题。 当我运行我的代码所有缩略图'图像是相同的,TextViews中没有文本显示,即使Log.D显示我正在将textViews更改为正确的文本和图像。 我的活动代码:

ListView lvMaterias;
String[] materiasNombre;
int[] thumbnails={R.drawable.thumbnailanato,
        R.drawable.thumbnailbioqui,
        R.drawable.thumbnailanato,
        R.drawable.thumbnailbioqui,
        R.drawable.thumbnailanato,
        R.drawable.thumbnailbioqui,
        R.drawable.thumbnailanato,
        R.drawable.thumbnailbioqui,
        R.drawable.thumbnailanato,
        R.drawable.thumbnailbioqui,
        R.drawable.thumbnailanato,
        R.drawable.thumbnailbioqui,
        R.drawable.thumbnailanato,
        R.drawable.thumbnailbioqui,
        R.drawable.thumbnailanato,
        R.drawable.thumbnailbioqui};
List<materiaRow> materiasObjetos= new ArrayList<materiaRow>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_select);
    //inicializar los arrays y todo
    lvMaterias = (ListView)findViewById(R.id.lvMaterias);
    materiasNombre=this.getResources().getStringArray(R.array.nombreMateria);
    int i=0;
    for (String nombre : materiasNombre){
        Log.d("loop", nombre);
        materiasObjetos.add(new materiaRow(thumbnails[i],nombre, "0%"));
    }
lvMaterias.setAdapter(new materiasAdapter(getApplicationContext(), R.layout.rowmateria, materiasObjetos));
}

}

我的适配器类,getView方法的log.d显示我有正确的文本和图像,但textViews没有得到更改:

public class materiasAdapter extends ArrayAdapter implements     View.OnClickListener{
private int layout;
public materiasAdapter(Context context, int resource, List objects) {
    super(context, resource, objects);
    layout=resource;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    materiaHolder mH;
    if (convertView==null){
        mH= new materiaHolder();
        LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView= inflater.inflate(layout, parent, false);
        mH.thumbnail= (ImageView) convertView.findViewById(R.id.ivthumbnail);
        mH.materia= (TextView) convertView.findViewById(R.id.tvmateria);
        mH.porcentaje= (TextView) convertView.findViewById(R.id.tvporcentaje);
        mH.favorito = (Button) convertView.findViewById(R.id.bfavoritos);
        mH.favorito.setOnClickListener(this);
        convertView.setTag(mH);
    }
    else {
        mH= (materiaHolder) convertView.getTag();
    }
    materiaRow mR= (materiaRow) getItem(position);
    mH.thumbnail.setImageResource(mR.getThumbnail());
    mH.porcentaje.setText(mR.getPorcentaje());
    Log.d("thumbnail", Integer.toString(mR.getThumbnail()));
    mH.materia.setText(mR.getMateria());
    Log.d("texto", mR.getMateria());
    return convertView;
}

@Override
public void onClick(View v) {

}

class materiaHolder {
    ImageView thumbnail;
    TextView materia;
    TextView porcentaje;
    Button favorito;
}
}

请求的XML(选择活动):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
tools:context="com.example.quetzal.elite.Select">

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"></LinearLayout>

<ListView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/lvMaterias" />

和rowMateria(适配器类的资源):

<?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"
android:orientation="horizontal">

<ImageView
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:id="@+id/ivthumbnail" />

<LinearLayout
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingLeft="20dp" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/tvmateria" />
</LinearLayout>

<LinearLayout
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingLeft="20dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/tvporcentaje" />
</LinearLayout>

<Button
    android:layout_width="wrap_content"
    android:layout_height="50dp"
    android:text="fav"
    android:id="@+id/bfavoritos" />

</LinearLayout>

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

就thumgnail的问题而言......在主要的onCreate()中,看起来你没有正确添加行。

int i=0;
for (String nombre : materiasNombre){
    Log.d("loop", nombre);
    materiasObjetos.add(new materiaRow(thumbnails[i],nombre, "0%"));
}

您需要增加i,否则您将始终获得缩略图[0]。

答案 1 :(得分:0)

当我运行你的代码时,无论出于什么原因在我的模拟器上,文本颜色和背景颜色是相同的 - 所以文本被设置,但是你看不到它。

您可以将活动背景设置为特定内容,例如

android:background="@android:drawable/screen_background_dark"

和带有类似

的文字

android:textColor="@android:color/primary_text_light"

我不太熟悉设置背景和文字颜色的首选方法 - 从长远来看,你应该看看我认为的主题。

答案 2 :(得分:0)