Передовые практики кнопки обновления Android? - PullRequest
0 голосов
/ 11 марта 2012

Привет. Имея активность, которая загружает твиттер.
Android Twitter String to Json Array .

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

Пока у меня есть возможность просто перезагрузить упражнение, это лучший способ сделать это?

    package co.uk.fantasticmedia.TheEvoStikLeague;


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;



import android.app.ListActivity;



public class TwitterActivity extends ListActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

    setContentView(R.layout.twitteract);


    Button refresh = (Button) findViewById(R.id.btn_refresh);

    //Listening to button event
    refresh.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {
            //Starting a new Intent
            Intent reload = new Intent(getApplicationContext(), TwitterActivity.class);



            startActivity(reload);


        }
    });





     try{
            // Create a new HTTP Client
            DefaultHttpClient defaultClient = new DefaultHttpClient();
            // Setup the get request
            HttpGet httpGetRequest = new HttpGet("https://api.twitter.com/1/statuses/user_timeline.json?screen_name=evostikleague&count=10");

            // Execute the request in the client
            HttpResponse httpResponse = defaultClient.execute(httpGetRequest);
            // Grab the response
            BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8"));
            String json = reader.readLine();

            Log.v(json,"jsonfeed");




            List<String> items = new ArrayList<String>();

              //items.add(json);


            JSONArray jArray = new JSONArray(json);


            for (int i=0; i < jArray.length(); i++)
            {    JSONObject oneObject = jArray.getJSONObject(i);
                items.add(oneObject.getString("text"));
                 Log.i("items", "items");
            }

            setListAdapter ( new ArrayAdapter<String>(this, R.layout.single_item, items));
            ListView list = getListView();
            list.setTextFilterEnabled(true);


            list.setOnItemClickListener(new OnItemClickListener(){

                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                        long arg3) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getApplicationContext(), ((TextView) arg1).getText(),1000).show();
                }



            });


        } catch(Exception e){
            // In your production code handle any errors and catch the individual exceptions
            e.printStackTrace();
        }

    }

















    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if (item.getItemId() == R.id.home) {

            startActivity(new Intent(TwitterActivity.this, HomeActivity.class));

            return(true);
      }


        if (item.getItemId() == R.id.match) {

            startActivity(new Intent(TwitterActivity.this, MatchActivity.class));

            return(true);
      }



        if (item.getItemId() == R.id.teams) {

            startActivity(new Intent(TwitterActivity.this, TeamsActivity.class));

            return(true);
      }



        if (item.getItemId() == R.id.twitter) {

            startActivity(new Intent(TwitterActivity.this, TwitterActivity.class));

            return(true);
      }

        if (item.getItemId() == R.id.info) {

            startActivity(new Intent(TwitterActivity.this, InfoActivity.class));

            return(true);
      }


        return(super.onOptionsItemSelected(item));


    }




}

Ответы [ 3 ]

1 голос
/ 11 марта 2012

можете ли вы опубликовать остаток своей деятельности? Особенно часть, которую вы используете для загрузки списка в первый раз.

Вероятно, нет необходимости перезапускать всю активность. Вам просто нужно переместить часть вашего кода, которая заполняет список, в свой собственный метод. Затем вы можете вызвать этот метод, когда пользователь захочет обновить.

Если ничего не изменилось, вы должны изменить:

 Intent reload = new Intent(getApplicationContext(), TwitterActivity.class);

до

Intent reload = new Intent(TwitterActivity.this, TwitterActivity.class);

EDIT: Вам нужно переместить свой блок try / catch в новый метод с именем refresh (). Затем вызывайте этот метод каждый раз, когда вы хотите перезагрузить список. как это:

Также было бы неплохо вывести свою сеть из основного потока.

public class TwitterActivity extends ListActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    setContentView(R.layout.twitteract);


    Button refresh = (Button) findViewById(R.id.btn_refresh);

    //Listening to button event
    refresh.setOnClickListener(new View.OnClickListener() {

        public void onClick(View arg0) {
            refresh();


        }
    });



    refresh();



}

private void refresh(){

     try{
        // Create a new HTTP Client
        DefaultHttpClient defaultClient = new DefaultHttpClient();
        // Setup the get request
        HttpGet httpGetRequest = new HttpGet("https://api.twitter.com/1/statuses/user_timeline.json?screen_name=evostikleague&count=10");

        // Execute the request in the client
        HttpResponse httpResponse = defaultClient.execute(httpGetRequest);
        // Grab the response
        BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8"));
        String json = reader.readLine();

        Log.v(json,"jsonfeed");




        List<String> items = new ArrayList<String>();

          //items.add(json);


        JSONArray jArray = new JSONArray(json);


        for (int i=0; i < jArray.length(); i++)
        {    JSONObject oneObject = jArray.getJSONObject(i);
            items.add(oneObject.getString("text"));
             Log.i("items", "items");
        }

        setListAdapter ( new ArrayAdapter<String>(this, R.layout.single_item, items));
        ListView list = getListView();
        list.setTextFilterEnabled(true);


        list.setOnItemClickListener(new OnItemClickListener(){

            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                Toast.makeText(getApplicationContext(), ((TextView) arg1).getText(),1000).show();
            }



        });


    } catch(Exception e){
        // In your production code handle any errors and catch the individual exceptions
        e.printStackTrace();
    }




}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    if (item.getItemId() == R.id.home) {

        startActivity(new Intent(TwitterActivity.this, HomeActivity.class));

        return(true);
  }


    if (item.getItemId() == R.id.match) {

        startActivity(new Intent(TwitterActivity.this, MatchActivity.class));

        return(true);
  }



    if (item.getItemId() == R.id.teams) {

        startActivity(new Intent(TwitterActivity.this, TeamsActivity.class));

        return(true);
  }



    if (item.getItemId() == R.id.twitter) {

        startActivity(new Intent(TwitterActivity.this, TwitterActivity.class));

        return(true);
  }

    if (item.getItemId() == R.id.info) {

        startActivity(new Intent(TwitterActivity.this, InfoActivity.class));

        return(true);
  }


    return(super.onOptionsItemSelected(item));


}

}
1 голос
/ 11 марта 2012

Используйте Меню для предоставления опции Обновить . Поэтому, когда пользователь нажимает кнопку Меню на телефоне, он может выбрать команду Обновить для перезагрузки твитов

0 голосов
/ 25 сентября 2012

Это более архаичная кнопка обновления, но я хорошо работаю в приложении.

public void refresh(View view){          //refresh is onClick name
    onRestart();
}

@Override
protected void onRestart() {

    // TODO Auto-generated method stub
    super.onRestart();
    Intent i = new Intent(lala.this, lala.class);  //your class
    startActivity(i);
    finish();

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