2011-12-29 29 views
2

私は2D配列を持ち、この2D配列には文字列があります。リストビューで文字列を表示する方法を知りたいですか?縦方向と横方向にスクロールする方法は?2次元配列をListViewに表示する方法は?

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

要件を提供し、明確にお尋ねください。あなたの質問を理解することは良くありません。 1Dまたは2DであってもListViewに文字列を表示できます。あなたがこの要件を得たところでそれを掲示してください、そして、我々だけがあなたを助けるでしょう。 –

+0

どのアイテムを縦にスクロールしたいですか?どちらが水平ですか?行または列?あなたの実際の要件は何ですか? –

+0

「2次元アレイ」とは、縦横両方向にスクロールできることを意味しますか? – dor506

答えて

1

あなたがリストビューを使用する方法、基本的な事柄を求めているように見えます。それを確認してくださいListViewのすべてを取得します。

Android ListView and ListActivity

1

それは私がリストビューに

マイアダプタクラスを2次元配列を実装している中で、リストview.Hereの私のソースコード内の2次元配列を表示することです: -

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ファイルも含めることができますか? ...私が最初にそれに着くなら、私はもっと一般的な解決策を投稿します。 –

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()); 
     ... 
    } 
} 
関連する問題