【问题标题】:Display Data in GridView with DataAdapter in Android在 Android 中使用 DataAdapter 在 GridView 中显示数据
【发布时间】:2014-05-29 21:13:20
【问题描述】:

我已尝试使用以下代码在 gridview 中显示来自数据适配器的数据。
以下链接适用于GridView with DataAdapter Tutorial.

我想要以下输出:

我已经按照教程进行操作并获得了我想要的输出,但不幸的是,当滚动页面时,
应用程序将自动关闭。

错误:“检测到应用程序失败,请重试”

如何解决这些问题?

代码: main.xml 文件。

<GridView xmlns:android="http://schemas.android.com/apk/res/android"    
    android:id="@+id/gridview"   
    android:stretchMode="columnWidth"
    android:cacheColorHint="#00000000"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:numColumns="2"
    android:clipChildren="true"
    android:horizontalSpacing="5dip"
    android:verticalSpacing="5dip" />  

代码: MainActivity.java 文件。

package com.example.gridviewdata;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.widget.GridView;

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    GridView gridview = (GridView) findViewById(R.id.gridview);  
    gridview.setAdapter(new DataAdapter(this));
}

代码: customgrid.xml 文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical">

    <TableLayout android:id="@+id/TableLayout01"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent">

        <TableRow android:id="@+id/TableRow01"
              android:layout_height="wrap_content"
              android:layout_width="wrap_content">

              <TextView  android:text="@string/hello_world"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:id="@+id/txtId"
                  android:layout_gravity="center_horizontal" />

              <TextView  android:text="@string/hello_world"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:id="@+id/txtName"
                  android:layout_gravity="center_horizontal" />

        </TableRow>
    </TableLayout>
</LinearLayout>

代码: DataAdapter.java 文件

package com.example.gridviewdata;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class DataAdapter extends BaseAdapter {

    Context mContext;
    private String [] id = {"S001","S002","S003","S004","S005","S006","S007","S008","S009","S010","S011","S012"};
    private String [] name={"Rohit","Rahul","Ravi","Amit","Arun","Anil","Kashif","Nayan","Jay","Sagar","Jairaj","Vishal"};
    private LayoutInflater mInflater;
    public DataAdapter(Context c)
    {
        mContext=c;
        mInflater = LayoutInflater.from(c);
    }
    public int getCount()
    {
        return id.length;
    }
    public Object getItem(int position)
    {
        return position;
    }
    public long getItemId(int position)
    {
        return position;
    }
    public View getView(int position, View convertView, ViewGroup parent)
    {
        ViewHolder holder=null;
        if(convertView==null)
        {
            convertView = mInflater.inflate(R.layout.customgrid,parent,false);
            holder = new ViewHolder();
            holder.txtId=(TextView)convertView.findViewById(R.id.txtId);
            holder.txtId.setPadding(100, 10,10 , 10);
            holder.txtName=(TextView)convertView.findViewById(R.id.txtName);
            holder.txtName.setPadding(100, 10, 10, 10);
            if(position==0)
            {                             
                convertView.setTag(holder);
            }
        }
        else
        {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.txtId.setText(id[position]);
        holder.txtName.setText(name[position]);
        return convertView;
    }
    static class ViewHolder
    {        
        TextView txtId;
        TextView txtName;
    }
}

为这些问题提供任何解决方案。
如果有其他可用资源,请给我一个参考。

【问题讨论】:

  • 第一个 MainActivity extends Activity 而不是 MainActivity extends ActionBarActivity
  • 并发布您的 logcat

标签: java android gridview dataadapter


【解决方案1】:

解决方案:

在 getView() 方法中返回所有项目,我在第一个项目中设置了标签,
当 android 再次为位置 1 调用 getView 时,我尝试从 convertView 获取标签,
但是我没有为convertView 1调用setTag,然后getTag返回一个空对象,我试图从一个空对象中获取对象txtName,然后发生错误。

删除 if(position==0) 然后应用程序可以完美运行并提供滚动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2012-08-28
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多