2016-01-29 34 views
-1

我在Fragment Home中有一個listview,當某人點擊列表項目時,他們會打開新的活動,數據將傳遞給新的活動並設置爲文本視圖。但是,當我在列表項ListView.setOnItemClickListener在點擊列表項目時不起作用

單擊什麼也沒有發生,這裏是我的onItemClickListner

public class Home extends Fragment { 

ListView listView; 
PostAdapter adapter; 
TextView userId; 
ArrayList<Post> postArrayList; 
//private SwipeRefreshLayout swipeRefreshLayout; 
DBHandler handler; 
View view; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.activity_post, container, false); 
    listView = (ListView) view.findViewById(R.id.listview); 

    ConnectivityManager connectivityManager = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 
    if(networkInfo != null && networkInfo.isConnected()){ 
     new DataFetcherTask().execute(); 
    }else{ 
     Toast.makeText(getActivity(), "Internet Error", Toast.LENGTH_LONG).show(); 
    } 

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      userId = (TextView)view.findViewById(R.id.row_userid); 
      Intent i = new Intent(getActivity(), PostView.class); 
      i.putExtra("userid", userId.getText().toString()); 
      startActivity(i); 
      Toast.makeText(getActivity(),"hello",Toast.LENGTH_LONG).show(); 
     } 
    }); 
    return view; 

} 

private class DataFetcherTask extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 

    @Override 
    protected Void doInBackground(Void... args) { 
     String serverData = null;// String object to store fetched data from server 
     // Http Request Code start 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpGet httpGet = new HttpGet("http://xyz.lt/json.php"); 
     try { 
      HttpResponse httpResponse = httpClient.execute(httpGet); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      serverData = EntityUtils.toString(httpEntity); 
      Log.d("response", serverData); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     // Http Request Code end 
     // Json Parsing Code Start 
     try { 
      postArrayList = new ArrayList<Post>(); 
      JSONObject jsonObject = new JSONObject(serverData); 
      JSONArray jsonArray = jsonObject.getJSONArray("post"); 
      for (int i = 0; i < jsonArray.length(); i++) { 

       JSONObject jsonObjectPOST = jsonArray.getJSONObject(i); 
       String post_id = jsonObjectPOST.getString("post_id"); 
       String user_id = jsonObjectPOST.getString("user_id"); 
       String user_name = jsonObjectPOST.getString("user_name"); 
       String post_title = jsonObjectPOST.getString("post_title"); 
       String likes = jsonObjectPOST.getString("likes"); 
       String post_cat = jsonObjectPOST.getString("post_cat"); 
       String post_time = jsonObjectPOST.getString("post_time"); 
       Post post = new Post(); 
       post.setPost_id(post_id); 
       post.setUser_id(user_id); 
       post.setUser_name(user_name); 
       post.setPost_title(post_title); 
       post.setLikes(likes); 
       post.setPost_cat(post_cat); 
       post.setPost_time(post_time); 
       handler.addPost(post);// Inserting into DB 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 

     } 
     //Json Parsing code end 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 
     ArrayList<Post> postList = handler.getAllPost(); 
     adapter = new PostAdapter(getActivity(), postList); 
     listView.setAdapter(adapter); 
    } 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    new DataFetcherTask().execute(); 
    ArrayList<Post> postList = handler.getAllPost(); 
    adapter = new PostAdapter(getActivity(), postList); 
    listView.setAdapter(adapter); 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    handler = new DBHandler(getActivity()); 
    new DataFetcherTask().execute(); 
} 
} 

我用圖片+的TextView +圖像按鈕做了自定義列表項的完整代碼。我只需要post_id,然後所有的數據將使用該文本從sqlite中獲取。 Textview在PostAdapter中初始化,其中數據連接到列表視圖。

點擊後,該意向將打開

public class PostView extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_post_view); 
    TextView textView = (TextView) findViewById(R.id.textView3); 

    Intent intent = getIntent(); 
    if (intent!=null) { 
     String stringData= intent.getStringExtra("userid"); 
     textView.setText(stringData); 
    } 
} 
} 

現在只需要點擊steup監聽器上執行他的任務列表視圖。感謝您提前幫助。

+0

想要發送哪個字符串值? –

+0

row_userid從textView –

回答

0

發送數據這樣

public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    Intent i = new Intent(getActivity(), PostView.class); 
    TextView userId = (TextView) view.findViewById(R.id.row_userid); 
    i.putExtra("userid", userId.getText().toString()); 
    startActivity(i); 
} 

得到這樣的數據在PostView

Intent intent = getIntent(); 
if (intent!=null) { 
    String stringData= intent.getStringExtra("userid"); 
} 
+0

但如何設置字符串意味着它將如何從textview中獲得價值 –

+0

@HoneyKamboj:請參閱我的更新。 – Rohit5k2

+0

錯誤@ i.putExtra(「userid」,userId); –

0

使用此發送數據,

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    Intent i = new Intent(getActivity(), PostView.class); 
    TextView userId = (TextView) view.findViewById(R.id.row_userid); 
    intent.putExtra("row_userid", userId.getText().toString()); 
    startActivity(i); 
} 

並檢索它像這樣,

String row_userid = getIntent().getStringExtra("row_userid"); 
+0

不工作給予例外 –

+0

什麼異常? – Msp

+0

紅色下劃線listView.setOnItemClickListener(新AdapterView.OnItemClickListener(){ @覆蓋 公共無效onItemClick(適配器視圖父,觀景,INT位置,長的id){ 意向書I =新意圖(getActivity(),PostView.class); TextView的用戶id =(TextView的)view.findViewById(R.id.row_userid); i.putExtra( 「row_userid」,userId.getText()的toString()); startActivity(ⅰ); } }); –

0

只需在xml佈局文件的ImageButton中添加android:focusable =「false」即可。這之後你的ListView點擊聽者將工作

+0

不工作沒有任何反應 –

0

當您使用 userId = (TextView)view.findViewById(R.id.row_userid); 您正在使用view內李斯特,而你應該使用this.view