Android:自定义微调器不显示所选项目

时间:2013-02-20 15:20:40

标签: android spinner

问题是在微调器中选择的项目是以白色渲染的,尽管我已经明确地设置了颜色。我不知道该怎么做。我用谷歌搜索了类似的主题,但他们通过设置颜色来解决。对我来说没有用。这是我的代码:

private View getFormView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null) {
        LayoutInflater inflater = mA.getLayoutInflater();
        v = inflater.inflate(R.layout.f_new_program_form, null);
        Spinner sp = (Spinner) v.findViewById(R.id.spinnerExercises);
        ExerciseSpinnerAdapter spAdapter = new ExerciseSpinnerAdapter(mA);

        LoadTask task = new LoadTask((BBBaseAdapter) spAdapter,
                URLs.host + URLs.allExercisesUrl, mA);
        task.execute();
        sp.setAdapter(spAdapter);
    }
    return v;
}

ExerciseSpinnerAdapter.java:

public class ExerciseSpinnerAdapter extends BBBaseAdapter implements
    SpinnerAdapter {

protected JSONArray data = new JSONArray();

public ExerciseSpinnerAdapter(Activity a) {
    super(a);
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return this.data.length();
}

@Override
public JSONObject getItem(int position) {
    try {
        return this.data.getJSONObject(position);
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return null;
}

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

@Override
public int getItemViewType(int position) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null) {
        v = mA.getLayoutInflater().inflate(R.layout.custom_spinner, parent,
                false);

    }
    TextView t = (TextView) v.findViewById(R.id.spinnerTextZZ);
    try {
        t.setText(getItem(position).getString("name"));
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
     t.setTextColor(Color.RED);

    return v;
}

@Override
public int getViewTypeCount() {
    // TODO Auto-generated method stub
    return 1;
}

@Override
public boolean hasStableIds() {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean isEmpty() {
    // TODO Auto-generated method stub
    return false;
}

@Override
public void registerDataSetObserver(DataSetObserver observer) {
    // TODO Auto-generated method stub

}

@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
    // TODO Auto-generated method stub

}

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
    View v = convertView;
    if (v == null) {
        v = mA.getLayoutInflater().inflate(R.layout.custom_spinner, parent,
                false);

    }
    TextView t = (TextView) v.findViewById(R.id.spinnerTextZZ);
    try {
        t.setText(getItem(position).getString("name"));
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
     t.setTextColor(Color.RED);
    return v;
}

@Override
public void updateEntries(Object data) {
    this.data = (JSONArray) data;
    notifyChanges();
}   

public void notifyChanges() {
    notifyDataSetChanged();
}

}

custom_spinner:

 < TextView xmlns:android="http://schemas.android.com/apk/res/android" 
   android:id="@+id/spinnerTextZZ"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:padding="0dp"
   android:layout_margin="0dp"
   android:text="!"
   android:textAppearance="?android:attr/textAppearanceMedium" android:textColor = "#000000" />

我错过了什么?

1 个答案:

答案 0 :(得分:0)

如果你有额外的方法:

@Override
public int getViewTypeCount() {
// TODO Auto-generated method stub
return 1;
}

@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return false;
}

@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return false;
}

@Override
public void registerDataSetObserver(DataSetObserver observer) {
// TODO Auto-generated method stub

}

删除它们或实施。但是如果扩展BaseAdapter,它们已经实现了。不知道我从哪个例子中得到它们。