Как вызвать notifyDataSetChanged () из AsyncTask, который находится в другом классе - PullRequest
0 голосов
/ 16 апреля 2020

Поэтому я пытаюсь вызвать notifyDataSetChanged(), чтобы обновить ArrayList после завершения OnPostExecute Однако я нахожу, что это довольно сложно сделать с AsyncTask, находящимся в другом классе. Я также не могу назвать его в setpagecontent, так как это метод stati c.

Я ценю всю оказанную помощь :)

Ответы [ 2 ]

0 голосов
/ 16 апреля 2020

PostListActivity. java

 public class PostListActivity extends AppCompatActivity {
   ArrayList<String> Posts_Array_List = new ArrayList<String>();
    //  private RequestQueue mQueue;
 ArrayAdapter<String> PostsAdaptor;
 ListView lv;
 Context mContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_post_list);
    mContext=PostListActivity.this;
     lv = (ListView) findViewById(R.id.LV_Post_list);

    PostsAdaptor = new ArrayAdapter<String>(PostListActivity.this, android.R.layout.simple_list_item_1, Posts_Array_List);
    PostsAdaptor.notifyDataSetChanged();
    lv.setAdapter(PostsAdaptor);
    String stringUrl = "https://www.reddit.com/r/cars/hot.json?limit=1";

    new DownloadAsyncTask(mContext,stringUrl).execute();
    Bundle extras = getIntent().getExtras();

    if (extras != null) {
        String myParam = extras.getString("paramPosition");
        // Get the URL from the UI's text field.
    }
}

public void setPageContent(String thePageContent) {
    System.out.println("Got: " + thePageContent);
    String jsonFromReddit = thePageContent;
    //ArrayList<String> posts = RedditPostHelper.getRedditPostsFromJSON(jsonFromReddit);
   // Posts_Array_List.addAll(posts);
    Posts_Array_List.add(thePageContent);
    System.out.println("result==="+thePageContent);
    PostsAdaptor.notifyDataSetChanged();
}
}

DownloadAsyncTask. java

 public class DownloadAsyncTask extends AsyncTask<Void,Void,String>{
private Context context;
private String url;
DownloadAsyncTask(Context mContext, String stringUrl)
{
    super();
    this.context=mContext;
    this.url=stringUrl;
}

@Override
protected String doInBackground(Void... voids) {
    String result="testing";
    return result;
}
@Override
protected void onPostExecute(String result) {
    if (!result.isEmpty() && result !=null){
        PostListActivity pla = (PostListActivity) context;
        pla.setPageContent(result);
    }

}

Вывод:

enter image description here}

0 голосов
/ 16 апреля 2020

В код будут внесены некоторые изменения, но для межклассовой связи вы можете использовать интерфейс и использовать его функции в качестве обратных вызовов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...