Динамические элементы GridView в Android - PullRequest
1 голос
/ 05 ноября 2011

Привет, я пытаюсь создать приложение, в котором пользователь может ввести несколько чисел, и эти числа будут отображаться в виде сетки с пользовательскими элементами вида сетки.Если я использую общие элементы gridview Android, это работает.Но если я использую свой собственный макет, это не работает.Будет показан только первый элемент в массиве.У кого-нибудь есть клоч, почему это не работает?

public class GridViewAppActivity extends Activity {

private ArrayList<String> items;
private GridViewAdapter adapter;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    items = new ArrayList<String>();    
    adapter = new GridViewAdapter(this);
    GridView gridView = (GridView) findViewById(R.id.gridView);
    gridView.setAdapter(adapter);

    final Button addButton  = (Button) findViewById(R.id.add_button);
    final EditText itemEditText = (EditText) findViewById(R.id.number_field);

    // Click listener for Button
    addButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
             items.add(itemEditText.getText().toString());
             itemEditText.setText("");
             adapter.notifyDataSetChanged();
        }
    });
}

public class GridViewAdapter extends BaseAdapter {

    private Context mContext;

    public GridViewAdapter(Context c) {
        mContext = c;
    }

    public int getCount() {
        return items.size();
    }

    public Object getItem(int position) {
        return items.get(position);
    }

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

    public View getView(int position, View convertView, ViewGroup parent) {
        View v;
        if(convertView==null){
            LayoutInflater li = getLayoutInflater();
            v = li.inflate(R.layout.grid_item, null);
            TextView tv = (TextView)v.findViewById(R.id.grid_item_text);
            tv.setText(items.get(position));
        } else {
            v = convertView;
        }
        return v;
    }

}
}

1 Ответ

2 голосов
/ 05 ноября 2011

Попробуйте,

public View getView(int position, View convertView, ViewGroup parent) {         
    View v;         

    if(convertView == null) {
        LayoutInflater li = getLayoutInflater();
        v = li.inflate(R.layout.grid_item, null);
    } else {             
        v = convertView;         
    }

    TextView tv = (TextView)v.findViewById(R.id.grid_item_text);
    tv.setText(items.get(position));         

    return v;     
} 
...