2012-12-20 4 views
0

버튼을 클릭하면 gridview 테이블에 데이터를 추가해야합니다. 내 코드 :gridview에 값을 추가하는 방법

String[] data = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"}; 
    GridView gvMain; 
    ArrayAdapter<String> adapter; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.smena); 
      adapter = new ArrayAdapter<String>(this, R.layout.item, R.id.tvText, data); 
       gvMain = (GridView) findViewById(R.id.gridView1); 
       gvMain.setAdapter(adapter); 
      Button but1=(Button) findViewById(R.id.button1); 
      but1.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View arg0) { 

        ButtonOn (1); 
       } 
      }); 
    } 

    public void ButtonOn (int Art){ 
     adapter.add("1"); 
     gvMain.setAdapter(adapter); 
    } 

버튼을 클릭하면 응용 프로그램이 예기치 않게 중지되었습니다.

+1

LogCat은 무엇을 표시합니까? – jprofitt

+0

그건 그렇고, 당신의'ButtonOn' 메쏘드에서, 어댑터를 다시 설정하는 대신'notifyDataSetChanged' 메쏘드를 호출해야합니다. –

답변

1

ArrayAdapter는 배열을 수정할 수없는 AbstractList (List)로 변환합니다. ArrayAdapter를 초기화하는 동안 배열을 사용하는 대신 ArrayList를 사용하십시오. 로그 캣가 표시되고 오류가 어떤 종류의

String[] data = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k" }; 

    ArrayList<String> lst = new ArrayList<String>(); 
    GridView gvMain; 

    ArrayAdapter<String> adapter; 

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

     lst.addAll(Arrays.asList(data));   
     adapter = new ArrayAdapter<String>(this, R.layout.title_bar, R.id.editText1,lst); 

     gvMain = (GridView) findViewById(R.id.gridView1); 
     gvMain.setAdapter(adapter); 

     Button but1 = (Button) findViewById(R.id.button1); 
     but1.setOnClickListener(new OnClickListener() { 

      public void onClick(View arg0) { 

       ButtonOn(1); 
      } 
     }); 
    } 

    public void ButtonOn(int Art) { 
     lst.add("1");  
     gvMain.setAdapter(adapter); 
    } 
0
Try This Code 

String[] items = {"a","b","c","d","e","f"}; 



      Button b = (Button)findViewById(R.id.button1); 

      b.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        GridView gridView = (GridView)findViewById(R.id.gridView1); 

        gridView.setAdapter(new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, items)); 

(or) 

gridView.setAdapter(new ArrayAdapter<String>(getApplicationContext(),R.layout.cust, R.id.textView1, items)); 

       } 
      }); 
0

...

는 당신에게 당신이 모든 항목을 팽창 시도해야 '활동을 시작할 수 없습니다'는 '널 포인터 예외'또는를 보여주는 경우 하나의 액티비티에서 데이터를 사용자의 액티비티에 올바르게 적용하고 GridView를 새로운 액티비티에 표시하십시오.

당신은 내 생각을 이해하기를 바랍니다. 더 중요한 것은 활동이 더 많은 메모리를 소비하기 때문에 활동의 내용으로 활동을 사용하도록 제안하지 않는다는 것입니다. 나는 동일한 지침을 따르지만 단점을 숨기는 많은 자습서가 있다는 것을 알고 있습니다.

관련 문제