2011-12-29 44 views
2

我有2D數組,這個2D數組有字符串。我想知道如何在ListView中顯示字符串?如何在垂直和水平方向上滾動?如何在ListView中顯示二維數組?

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

請提供需求和問清楚。它不好理解你的問題。我們可以在ListView中顯示字符串,即使它是1D或2D。如果你有這個要求,請發佈它,然後只有我們會幫助你。 – 2011-12-29 10:47:54

+0

你想垂直滾動哪些項目?並水平?行或列?你的實際需求是什麼? – 2012-01-02 05:36:43

+0

「二維數組」表示您可以垂直和水平滾動嗎? – dor506 2011-12-29 10:52:00

回答

1

這似乎是你所要求的基本的東西,如何使用ListView控件。請檢查它你會得到關於ListView的所有信息。

Android ListView and ListActivity

1

它是顯示在列表view.Here的我的源代碼的兩d陣列,其中我已經實現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; 

} 

} 
+1

感謝您的來源,但我很難讓它編譯。你能概括你的源代碼並且包含你的xml文件嗎? ...如果我首先想到它,我會發佈一個更通用的解決方案。 – 2012-01-22 19:12:27

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