【问题标题】:List OnItemCLickListner is not working in Asyntask?List OnItemCLickListener 在 Asynctask 中不起作用?
【发布时间】:2013-06-04 06:47:13
【问题描述】:

我正在执行这部分代码并尝试解析数据并在 custombase 适配器上进行设置,然后我想让列表 clcikable ...

import java.util.ArrayList;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.ListActivity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class StreamPage extends ListActivity {

    String UrlForStream;
    TextView tv;

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

        RestImplimentationMethods urlretriver = new RestImplimentationMethods();

        UrlForStream = urlretriver.GenerateFullUrlforStream(getIntent()
                .getStringExtra("secret"));

        ParsingForStream(UrlForStream);

        Log.d("****Stream****URL", UrlForStream);

    }

    private void ParsingForStream(String urlForStream2) {
        // TODO Auto-generated method stub
        new LongOperation().execute(UrlForStream);
    }

    private class LongOperation extends AsyncTask<String, Void, String> implements OnItemClickListener {


        private static final String TAG_streamable = "streamable";
        private static final String TAG_Title = "title";
        private static final String TAG_Description = "description";
        private static final String TAG_Image = "image";
        StreamPersingClass Spc;
        JSONArray streamable = null;

        ArrayList<StreamPersingClass> searchResultss = new ArrayList<StreamPersingClass>();

        final ListView lv1 = getListView();

        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub

            JSONParser jparser = new JSONParser();
            JSONObject json = jparser.getJSONFromUrl(params[0]);

            try {
                streamable = json.getJSONArray(TAG_streamable);

                for (int i = 0; i < streamable.length(); i++) {
                    Spc = new StreamPersingClass();
                    JSONObject c = streamable.getJSONObject(i);
                    Spc.setTitle(c.getString(TAG_Title));
                    Spc.setDescription(c.getString(TAG_Description));
                    Spc.setImage(c.getString(TAG_Image));

                    searchResultss.add(Spc);

                    Log.d("****Stream***Title***", Spc.getTitle());
                    Log.d("****Stream***Description***", Spc.getDescription());
                    Log.d("****Stream**Image Title****", Spc.getImage());

                }

            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);

            lv1.setAdapter(new MyCustomBaseAdapter(StreamPage.this,
                    searchResultss));


            lv1.setOnItemClickListener(this);
        }

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
        }

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

    }


}

我现在要做什么??任何建议......我尝试了另一个代码,其中没有运行良好的异步任务......

【问题讨论】:

  • 当前代码有什么问题?
  • 我没有出错,但我正在尝试使列表视图可点击...但它没有发生...

标签: android listview android-asynctask


【解决方案1】:

不要在异步任务中设置适配器,只需调用 notifydatasetchanged()。然后尝试您的点击事件。

【讨论】:

    【解决方案2】:

    此代码应在 ListActivity 即。在你的情况下StreamPage

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

    编辑:

      import java.util.ArrayList;
    
        import org.json.JSONArray;
        import org.json.JSONException;
        import org.json.JSONObject;
    
        import android.app.ListActivity;
        import android.os.AsyncTask;
        import android.os.Bundle;
        import android.util.Log;
        import android.view.View;
        import android.widget.AdapterView;
        import android.widget.AdapterView.OnItemClickListener;
        import android.widget.ListView;
        import android.widget.TextView;
        import android.widget.Toast;
    
        public class StreamPage extends ListActivity implements OnItemClickListener {
    
            String UrlForStream;
            TextView tv;
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.streampage);
    
                RestImplimentationMethods urlretriver = new RestImplimentationMethods();
    
                UrlForStream = urlretriver.GenerateFullUrlforStream(getIntent()
                        .getStringExtra("secret"));
    
                ParsingForStream(UrlForStream);
    
    setOnItemClickListener(this);
    
                Log.d("****Stream****URL", UrlForStream);
    
            }
    
            private void ParsingForStream(String urlForStream2) {
                // TODO Auto-generated method stub
                new LongOperation().execute(UrlForStream);
            }
    
            private class LongOperation extends AsyncTask<String, Void, String>  {
    
    
                private static final String TAG_streamable = "streamable";
                private static final String TAG_Title = "title";
                private static final String TAG_Description = "description";
                private static final String TAG_Image = "image";
                StreamPersingClass Spc;
                JSONArray streamable = null;
    
                ArrayList<StreamPersingClass> searchResultss = new ArrayList<StreamPersingClass>();
    
                final ListView lv1 = getListView();
    
                @Override
                protected String doInBackground(String... params) {
                    // TODO Auto-generated method stub
    
                    JSONParser jparser = new JSONParser();
                    JSONObject json = jparser.getJSONFromUrl(params[0]);
    
                    try {
                        streamable = json.getJSONArray(TAG_streamable);
    
                        for (int i = 0; i < streamable.length(); i++) {
                            Spc = new StreamPersingClass();
                            JSONObject c = streamable.getJSONObject(i);
                            Spc.setTitle(c.getString(TAG_Title));
                            Spc.setDescription(c.getString(TAG_Description));
                            Spc.setImage(c.getString(TAG_Image));
    
                            searchResultss.add(Spc);
    
                            Log.d("****Stream***Title***", Spc.getTitle());
                            Log.d("****Stream***Description***", Spc.getDescription());
                            Log.d("****Stream**Image Title****", Spc.getImage());
    
                        }
    
                    } catch (JSONException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
    
                    return null;
                }
    
                @Override
                protected void onPostExecute(String result) {
                    // TODO Auto-generated method stub
                    super.onPostExecute(result);
    
                    lv1.setAdapter(new MyCustomBaseAdapter(StreamPage.this,
                            searchResultss));
    
    
                    lv1.setOnItemClickListener(this);
                }
    
                @Override
                protected void onPreExecute() {
                    // TODO Auto-generated method stub
                    super.onPreExecute();
                }
    
    
    
            }
    @Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                        long arg3) {
                    // TODO Auto-generated method stub
                    Toast.makeText(getApplicationContext(), "Clicked", Toast.LENGTH_LONG).show();
                }
    
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      相关资源
      最近更新 更多