Как управлять gridview в Android? - PullRequest
0 голосов
/ 08 марта 2012

Я написал следующее, чтобы показать мои данные в виде сетки.Это процедура моего кода.

В onCreate ()

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_newslist);
// Initializing NewsAdapter in order to loading the list of NEWS items
    newsAdapter = new NewsAdapter(this);
// Initializing grid view to show news
        gridView = (GridView) findViewById(R.id.news_gridview);
        gridView.setAdapter(newsAdapter);
        gridView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                Toast.makeText(NewsList.this, "" + position, Toast.LENGTH_SHORT).show();
            }
        });

Затем в onStart () я получу данные XML с сервера, затем проанализирую их, и окончательные проанализированные данные будут сохранены.в "parsedList" (100% у меня есть данные в этой переменной, потому что я видел это в logcat).

@Override
    protected void onStart() {
        super.onStart();
        String strNewsContent = "***";

        ...

        newsAdapter.setData(parsedList);
        newsAdapter.notifyDataSetChanged();
    }

Наконец-то это мой "NewsAdapter":

public class NewsAdapter extends BaseAdapter {

    private LayoutInflater myInflater;
    private NewsFeedItemList itemList;


    public NewsAdapter(Context c) {
        myInflater = LayoutInflater.from(c);
    }

    public void setData(NewsFeedItemList newsFeedItemList){
        itemList = newsFeedItemList;

        Log.i("NewsAdapter", "Parsed list passed to the adapter.");
    }

    @Override
    public int getCount() {
        return 0;
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

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

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

        if (convertView == null) {
            convertView = myInflater.inflate(R.layout.grid_news, null);
            holder = new ViewHolder();
            holder.ivIcon = (TextView) convertView.findViewById(R.id.news_icon);
            holder.tvLabel = (TextView) convertView.findViewById(R.id.news_label);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.ivIcon.setText(itemList.getImage().get(position));
        holder.tvLabel.setText(itemList.getTitle().get(position));

        Log.i("Position is>>>>:", Integer.toString(position));

        return convertView;
    }   

    static class ViewHolder {
        TextView ivIcon;
        TextView tvLabel;
    }

}

Формат grid_news такой:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <TextView
        android:id="@+id/news_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@string/menu_contentdescription"
        android:layout_centerHorizontal="true" />

    <TextView
        android:id="@+id/news_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="#ffffff"
        android:textSize="15sp"
        android:textStyle="bold"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:paddingBottom="10dip" />

</RelativeLayout>

Понятия не имею, почему яя не вижу результат в моем эмуляторе / устройстве.

1 Ответ

2 голосов
/ 08 марта 2012

Я думаю, это потому, что getCount () возвращает 0;это не должно быть itemList.size ()?в новостях NewsAdapter.

...