如何在ListView中显示二维数组?

3

我有一个二维数组,其中包含字符串。我想知道如何在ListView中显示这些字符串?如何同时垂直和水平滚动?

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

请明确提供需求并清晰地提问。理解您的问题并不好。即使是一维或二维,我们也可以在ListView中显示字符串。请发布您获取此要求的位置,然后我们才能帮助您。 - Yugandhar Babu
“二维数组”是指您可以垂直和水平同时滚动吗? - dor506
你想要哪些项目垂直滚动?横向滚动又有哪些?行还是列?你的实际需求是什么? - Yugandhar Babu
对我来说很清楚。ListView是一维UI,适用于一维数组。他想要一个二维UI来显示他的二维数组。 - SMBiggs
3个回答

1

看起来你正在询问一些基础问题,如何使用ListView。请查看它,你将会了解关于ListView的所有内容。

Android ListView和ListActivity


1

这是一个关于编程的内容,需要翻译成中文:

这段代码用于在列表视图中显示二维数组。以下是我实现了二维数组在列表视图中的源代码:

我的适配器类:

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;

}

}

1
谢谢提供源代码,但我在编译时遇到了困难。您能否将您的源代码泛化并包含您的XML文件?如果我先解决了问题,我会发布一个更通用的解决方案。 - SMBiggs

0

将模型创建为内部类通常都能很好地工作。
这是存储任何数量的项目的好方法。

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());
        ...
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接