2013-01-18 57 views
0

我有一个问题ArrayAdapterlistView。我在ArrayAdapter中添加字符串列表,其中调试器显示我的工作没有缺陷,但是我看不到任何添加在我的listView上的内容。 (基于类似的问题) 事情,我试图用它做: +添加它里面runOnUiThread,但这没有帮助或我没有正确 用它+无效视图 +设置适配器一次 +添加到values和使用`adapter.notifyDataSetChanged() ,我不知道我能做些什么,使工作ArrayAdapter更新但不显示在listView中

这里是我的代码,如果它有助于:

public class RunnerApp extends Activity { 

     private ListView listView; 
    private ArrayList<String> values; 
    private ArrayAdapter<String> adapter; 
    private Intent newTable; 
    private String newName; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_runner_app); 
     listView = (ListView) findViewById(R.id.mylist); 
     values = new ArrayList<String>(); 
     adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values); 
     listView.setAdapter(adapter); 
     adapter.add("x"); 
     adapter.notifyDataSetChanged(); 
    } 

    //handled by android:onClick in layout file 
    public void addTable(View v){ 
     newTable = new Intent(this, AddTable.class); 
     startActivityForResult(newTable, 1); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data){ 
     super.onActivityResult(requestCode, resultCode, data); 
     if(requestCode == 1 && resultCode == Activity.RESULT_OK && data != null){ 
      data.getData(); 
      Log.d("add", "got intent"); 
      newName = data.getStringExtra("com.example.runnerapp.NAME"); 
      Log.d("add", "string " + newName); 
      Runnable run = new Runnable(){ 
       public void run(){ 
        if(newName != null) { 
         values.add(newName); 
         adapter.notifyDataSetChanged(); 
        } 
       } 
      }; 
      runOnUiThread(run); 
     } 
    } 

    @Override 
    public void onResume(){ 
     super.onResume(); 
     setContentView(R.layout.activity_runner_app); 
    } 
} 


public class AddTable extends Activity { 

    public final static String EXTRA_NAME = "com.example.runnerapp.NAME"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_add_table); 
    } 

    //handled by android:onClick in layout file 
    public void addThisTable(View v) { 
     Intent addTable = new Intent(); 
     EditText editText = (EditText) findViewById(R.id.addTableField); 
     String name = editText.getText().toString(); 
     addTable.putExtra(EXTRA_NAME, name); 
     setResult(Activity.RESULT_OK, addTable); 
     this.finish(); 
    } 

} 
+0

需要它看起来像有一个'addTable'的调用可能会丢失? –

+0

它是由布局中的'android:onClick'按钮完成的,我是否也应该发布布局文件? – jacobz

+0

你应该评论代码以反映这一点,实际上你可以发布'AddTable'类吗? –

回答

1

你应该尝试从onResume()取出setContentView(...)刚因为... e它会完全重置您的观点。它应该只在onCreate()