Java android findViewById在另一个类的静态方法中

时间:2014-11-13 19:13:47

标签: java android listview

我有一个活动和一个静态方法的抽象类。在这个方法中,我想在列表视图中渲染jsonArray。

这是活动

public class FeedActivity extends BaseActivity {

    ...

    private void renderFeed(String data){

        try {
                JSONObject json = new JSONObject(data);
                JSONArray d = json.getJSONArray("data");
                RenderLists.renderFeed(d);

        } catch (JSONException e) {
                Log.e("log_tag", "Error parsing data " + e.toString());
        }
    }
}

这是静态方法。

abstract class RenderLists {

    static void renderFeed(JSONArray data) throws JSONException{

        ArrayList feedList1 = new ArrayList<HashMap<String, Object>>();
        ListView feedList = (ListView) layout.findViewById(R.id.feedList); // This isn't working

        for (int i = 0; i < data.length(); i++) {
            HashMap<String, Object> hm;
            hm = new HashMap<String, Object>();
            hm.put("name", data.getJSONObject(i).getString("name").toString());
            feedList1.add(hm);

            FeedItemAdapter adapter = new FeedItemAdapter(FeedActivity.this, feedList1, R.layout.feed_list,
                    new String[] {"name"}, new int[] { R.id.feedCheckinName});

            feedList.setAdapter(adapter);
            feedList.setChoiceMode(feedList.CHOICE_MODE_SINGLE);
        }

    }

}

如何在静态方法中获取Activity和ListView?请解释一下。

1 个答案:

答案 0 :(得分:0)

在运行时传递它们可能是您唯一合理的选择:

abstract class RenderLists {
    static void renderFeed(JSONArray data, Activity act, ListView lv) throws JSONException{
        ...
    }
}

即便如此,请记住除了UI线程之外无法更新view

如果这对您不起作用,那么您可能会遇到其他问题(内存泄漏,NPE等),尽管您可以使用班级setters(但这样做&#39;很像上面那样。)