列表视图未正确加载

Listview not loading properly

我正在尝试从网络视图中保存 link。从我的网络视图 class,我将页面 url 保存如下。

public void AddUrl(String page_url){
    SaveUrlActivity urlactivity = new SaveUrlActivity();
    urlactivity.saveurl(page_url);
}

我的 SaveUrlActivity class 如下:

public class SaveUrlActivity extends Activity {

public String url;
public ListView lv;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_savedurl);
    lv = (ListView) findViewById(R.id.list);
    saveurl(url);
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            Intent in = new Intent(SaveUrlActivity.this, DisPlayWebPageActivity.class);

            in.putExtra("page_url", url);
            startActivity(in);
        }
    });
}

public void saveurl(String url1){
    url = url1;
    final List<RowItem> ri = new ArrayList<RowItem>();
    RowItem item = new RowItem(url);
    ri.add(item);
    SavedUrlAdapter adapter = new SavedUrlAdapter(SaveUrlActivity.this, ri);
    lv.setAdapter(adapter);
  }
}

每当我 运行 我的程序时,我都会收到以下错误。

 FATAL EXCEPTION: main
Process: com.example.smarthelp, PID: 16284
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
        at com.example.smarthelp.SaveUrlActivity.saveurl(SaveUrlActivity.java:46)
        at com.example.smarthelp.DisPlayWebPageActivity.AddUrl(DisPlayWebPageActivity.java:76)
        at com.example.smarthelp.DisPlayWebPageActivity.onOptionsItemSelected(DisPlayWebPageActivity.java:66)

谁能帮我找出我哪里出错了?

有几件事要看:

  1. 确保 activity_savedurl 布局文件实际包含具有 list ID 的视图。如果不是,则 lv 将是 null.
  2. 您将 url 传递给 saveurl(),但您从未为其赋值。

您在初始化之前使用了对 ListView lv 的引用,如果不先启动 SaveUrlActivity 就无法执行此操作,只有在 setContentView(R.layout.activity_savedurl); 您可以初始化lv.

public void saveurl(String url1){
    url = url1;
    final List<RowItem> ri = new ArrayList<RowItem>();
    RowItem item = new RowItem(url);
    ri.add(item);
    SavedUrlAdapter adapter = new SavedUrlAdapter(SaveUrlActivity.this, ri);
    lv.setAdapter(adapter);
  }

如果您在 SaveUrlActivity class 中创建一个静态变量并在开始 Activity 之前为其分配一个值,然后调用 saveurl() 从 class 里面,当你所有的视图都被初始化时。

类似于:

public void AddUrl(String page_url){
    SaveUrlActivity.page_url = page_url;
    Intent i = new Intent(this, SaveUrlActivity.class);
    startActivity(i);
}

在你的SaveUrlActivity.java中:

public class SaveUrlActivity extends Activity {

public String url;
public ListView lv;
static page_url;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_savedurl);
    lv = (ListView) findViewById(R.id.list);
    saveurl();
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            Intent in = new Intent(SaveUrlActivity.this, DisPlayWebPageActivity.class);

            in.putExtra("page_url", url);
            startActivity(in);
        }
    });
}

public void saveurl(){
    url = page_url;
    final List<RowItem> ri = new ArrayList<RowItem>();
    RowItem item = new RowItem(url);
    ri.add(item);
    SavedUrlAdapter adapter = new SavedUrlAdapter(SaveUrlActivity.this, ri);
    lv.setAdapter(adapter);
  }
}

如果你打算开始这个activity是准确的,如果你需要更新已经开始的数据,你最好使用Handler