如何在ListView中显示二维数组



我有一个2D数组,这个2D数组有字符串。我想知道如何在ListView中显示字符串?如何垂直和水平滚动?

String[][] board = new String[][] {{"1","10","100"},{"hi0","1hello","test"},{"test31","test32","test43"}};

这似乎是你在问基本的事情,如何使用ListView。请检查你是否会得到所有关于ListView的信息。

Android ListView和ListActivity

在列表视图中显示二维数组。这是我的源代码,我在列表视图中实现了2-d数组

我的适配器类:-

public class MyArrayAdapter extends ArrayAdapter<List>{

    QuickActionDemo quickActionDemo;
    public Activity context;
    public List<List> list;
    int CAMERA_PIC_REQUEST=10;
    private int selectedPos = -1;
    int clickPosition,rowPosition;
    Camera camera;
    private static final String TAG = "CameraDemo";
    public MyArrayAdapter(Activity context,List<List> list) {
        super(context,R.layout.attach_pic,list);
        this.context = context;
        this.list = list;
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }
    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position+1;
    }
    static class ViewHolder {
        public TextView tv1,tv2,tv3;
            }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View rowView = null;
        final ViewHolder holder = new ViewHolder();
        if (convertView == null) {
            LayoutInflater inflator = context.getLayoutInflater();
            rowView = inflator.inflate(R.layout.attach_pic, null);
            holder.tv1 = (TextView) rowView.findViewById(R.id.defectpic);
            holder.tv2 = (TextView) rowView.findViewById(R.id.no_of_uploded_pics);
            holder.tv3 = (TextView) rowView.findViewById(R.id.camera);
            holder.tv3.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub  
            //      Intent in = new Intent(getContext(),QuickActionDemo.class);
            //      context.startActivityForResult(in,0);

                    }
            });
            rowView.setTag(holder);
            List itemVal1 = (List)getItem(position);
            String st1 = (String)itemVal1.get(0);
            holder.tv1.setText(st1);
            List itemVal2 = (List)getItem(position);
            String st2 = (String)itemVal2.get(1);
            holder.tv2.setText(st2);
        } else {
            rowView = convertView;
            ((ViewHolder) rowView.getTag()).tv1.setTag(list.get(position));
            ((ViewHolder) rowView.getTag()).tv2.setTag(list.get(position));
            ((ViewHolder) rowView.getTag()).tv3.setTag(list.get(position));
        }
        return rowView;
    }
    @Override
    public int getItemViewType(int position) {
        // TODO Auto-generated method stub
        return position;
    }
    @Override
    public int getViewTypeCount() {
        // TODO Auto-generated method stub
        return list.size();
    }
}

这是我的活动类:-

public class MyActivity extends ListActivity {
    Context context;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    //  requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); // to hide the virtual keyboard
        setContentView(R.layout.defect_pic_listview);
        try{
        ArrayAdapter<List> adapter = new MyArrayAdapter(this,makeList());
        setListAdapter(adapter);    
        }
            }
private List<List> makeList(){
        List<List> all = new ArrayList();
    String[] newArray1 = {"Defect Picture1", "2"};
    List<String> newListObject1 = Arrays.asList(newArray1);
    String[] newArray2 = {"Defect Picture2","1"};
    List<String> newListObject2 = Arrays.asList(newArray2);
    String[] newArray3 = {"Defect Picture3","4"};
    List<String> newListObject3 = Arrays.asList(newArray3);
    String[] newArray4 = {"Defect Picture4","1"};
    List<String> newListObject4 = Arrays.asList(newArray4);
    String[] newArray5 = {"Defect Picture5","3"};
    List<String> newListObject5 = Arrays.asList(newArray5);

    all.add(newListObject1);
    all.add(newListObject2);
    all.add(newListObject3);
    all.add(newListObject4);
    all.add(newListObject5);

    return all;
}
}

将模型创建为内部类总是很有效。
这是存储任意数量项目的好方法。

public class ActivityClass extends Activity {
    ...
    ArrayList<ValuesModel> listViewValues = new ArrayList<ValuesModel>();
    listViewValues.add(new ValuesModel("row title", "row details"));
    ListViewAdapter listAdapter = new ListViewAdapter(this, listViewValues);
    ((ListView) findViewById(android.R.id.list)).setAdapter(listAdapter);
    ...
    public class ValuesModel {
        private String rowTitle;
        private String rowDetails;
        public ValuesModel(String rowTitle, String rowDetails) {
            this.rowTitle = rowTitle;
            this.rowDetails = rowDetails;
        }
        public String getRowTitle() {
            return rowTitle;
        }
        public String getRowDetails() {
            return rowDetails();
        }
}

然后在列表适配器中,

public class ListViewAdapter extends ArrayAdapter<ActivityClass.ValuesModel> {
    private ArrayList<ActivityClass.ValuesModel> mValues;
    ...
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ...
        //here whenever you need to retrieve your values, just say:  
        //  mValues.get(position).getRowTitle();
        //  mValues.get(position).getRowDetails();
        //if you use a viewholder pattern, you can do this:
        viewHolder.rowTitle = (TextView) convertView.findViewById(R.id.row_title_textview);  
        viewHolder.rowTitle.setText(mValues.get(position).getRowTitle());
        ...
    }
}

最新更新