У меня есть список с двумя текстовыми представлениями в виде столбцов.
Я использую собственный адаптер для управления адаптером.
public class MyCustomBaseAdapter extends BaseAdapter {
private static ArrayList<SearchResults> searchArrayList;
private LayoutInflater mInflater;
public MyCustomBaseAdapter(Context context, ArrayList<SearchResults> results) {
searchArrayList = results;
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return searchArrayList.size();
}
public Object getItem(int position) {
return searchArrayList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.row, null);
holder = new ViewHolder();
holder.txtName = (TextView) convertView.findViewById(R.id.left);
holder.txtCityState = (TextView) convertView.findViewById(R.id.right);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtName.setText(searchArrayList.get(position).getName());
holder.txtCityState.setText(searchArrayList.get(position).getCityState());
return convertView;
}
static class ViewHolder {
TextView txtName;
TextView txtCityState;
}
}
Я использовал глобальные переменные для изменения макета списка. Как видите, для txtName задано «левое» текстовое представление, а для txtCityState задано правое текстовое представление.
В упражнении я устанавливаю глобальную переменную равной 0 или 1 в зависимости от нажатия пользователем кнопки 01 или Button02:
final Button sortdate = (Button)findViewById(R.id.Button01);
sortdate.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
// lv1.setAdapter(simpleAdapter);
GlobalVars.setEset(0);
//Toast.makeText(MainActivity.this, String.valueOf(GlobalVars.getEset()), Toast.LENGTH_SHORT).show();
}
});
final Button sortname = (Button)findViewById(R.id.Button02);
sortname.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
GlobalVars.setEset(1);
//Toast.makeText(MainActivity.this, String.valueOf(GlobalVars.getEset()), Toast.LENGTH_SHORT).show();
}
});
Переменная, кажется, установлена, так как сообщение Toast показывает 0 или 1, если я нажимаю кнопки.
В моем MyCustomBaseAdapter я пытаюсь изменить макет следующим образом:
if (GlobalVars.getEset() == 0)
{
holder.txtName = (TextView) convertView.findViewById(R.id.left);
holder.txtCityState = (TextView) convertView.findViewById(R.id.right);
}
else if (GlobalVars.getEset() == 1)
{
holder.txtName = (TextView) convertView.findViewById(R.id.right);
holder.txtCityState = (TextView) convertView.findViewById(R.id.left);
}
но ничего не происходит. Что может быть не так с этим? Все остальное работает нормально.
Должно быть проще использовать другое представление адаптера с другим файлом row.xml. В другом файле row.xml я бы установил другую ширину для текстовых представлений, чтобы это было простым решением, но есть проблема со строкой lv1.setAdapter ....
final Button sortname = (Button)findViewById(R.id.Button02);
sortname.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
GlobalVars.setEset(1);
ArrayList<SearchResults> searchResults = GetSearchResults();
lv1 = (ListView) findViewById(R.id.ListView01);
lv1.setAdapter(new MyCustomBaseAdapter2(this, searchResults));
}
});
Как вы видите, это относится к MyCustomBaseAdapter2.java. Но проблема в том, что «конструктор MyCustomBaseAdapter2 (новый View.OnClickListener () {}, ArrayList) не определен». Это также происходит, когда речь идет о MyCustomBaseAdapter.java здесь. Из кнопки слушатель работает нормально.