2016-05-19 45 views
0

setOnItemClickListener事件Fragment.my setOnItemClickListener不起作用在onPostExecute ......請幫我傢伙....日Thnx在advance.here是我的代碼列表視圖setOnItemClickListener什麼也不做片段

HomeFragment。的java

public class HomeFragment extends Fragment { 

private PagerAdapter mPagerAdapter; 
ListView lvHome; 


public HomeFragment() { 

} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 

    View view = inflater.inflate(R.layout.fragment_home, container, false); 
    DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder() 
      .cacheInMemory(true) 
      .cacheOnDisk(true) 
      .build(); 
    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getActivity().getApplicationContext()) 
      .defaultDisplayImageOptions(defaultOptions) 
      .build(); 
    ImageLoader.getInstance().init(config); 

    lvHome = (ListView)view.findViewById(R.id.lvHome); 

    //Start download 
    new JSONTask().execute("http://www.darkabc.com/mobile_home.php"); 
    ViewPager pager = (ViewPager) view.findViewById(R.id.viewPager2); 


    List<Fragment> fragments = new Vector<Fragment>(); 
    fragments.add(Fragment.instantiate(getActivity(), ImageOneWelcome.class.getName())); 
    fragments.add(Fragment.instantiate(getActivity(), ImageTwoWelcome.class.getName())); 
    fragments.add(Fragment.instantiate(getActivity(), ImageThreeWelcome.class.getName())); 

    mPagerAdapter = new ImagePagerAdapter(getChildFragmentManager(), fragments); 

    pager.setAdapter(mPagerAdapter); 


    return view; 


} 
private class JSONTask extends AsyncTask<String,String, List<Bardata>> { 

    @Override 
    protected List<Bardata> doInBackground(String... params) { 

     HttpURLConnection connection = null; 
     BufferedReader reader= null; 

     try { 
      URL url = new URL(params[0]); 
      connection = (HttpURLConnection) url.openConnection(); 
      connection.connect(); 

      InputStream stream = connection.getInputStream(); 

      reader = new BufferedReader(new InputStreamReader(stream)); 

      StringBuffer buffer =new StringBuffer(); 

      String line=""; 
      while ((line =reader.readLine()) != null){ 
       buffer.append(line); 
      } 
      String finalJson = buffer.toString(); 

      JSONObject parentObject = new JSONObject(finalJson); 
      JSONArray parentArray = parentObject.getJSONArray("home"); 

      List<Bardata> bardataList =new ArrayList<>(); 
      Gson gson = new Gson(); 
      for (int i= 0;i<parentArray.length();i++) { 


       JSONObject finalObject = parentArray.getJSONObject(i); 

       Bardata bardata = gson.fromJson(finalObject.toString(), Bardata.class); 

       bardataList.add(bardata); 

      } 
      return bardataList; 


     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
    } 
    @Override 
    protected void onPostExecute(final List<Bardata> result) { 
     super.onPostExecute(result); 
     if(result != null) { 
      HomeAdapter adapter =new HomeAdapter(getActivity().getApplicationContext(), R.layout.homefragmentrow, result); 
      lvHome.setAdapter(adapter); 
      lvHome.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
        Bardata bardata = result.get(position); 
        Intent intent = new Intent(getActivity(), Individualbar.class); 
        intent.putExtra("bardata", new Gson().toJson(bardata)); 
        startActivity(intent); 
       } 
      }); 
     } else { 
      Toast.makeText(getActivity().getApplicationContext(), "Not able to fetch data from server, please check your internet.", Toast.LENGTH_SHORT).show(); 
     } 


    } 
} 
public class HomeAdapter extends ArrayAdapter { 

    private List<Bardata> barDataList; 
    private int resource; 
    private LayoutInflater inflater ; 

    public HomeAdapter(Context context, int resource, List<Bardata> objects) { 
     super(context, resource, objects); 
     barDataList = objects; 
     this.resource =resource; 
     inflater = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder holder = null; 

     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(resource, null); 
      holder.date1 = (ImageView) convertView.findViewById(R.id.date); 
      holder.image11 = (ImageView) convertView.findViewById(R.id.image1); 
      holder.image21 = (ImageView) convertView.findViewById(R.id.image2); 
      holder.image31 = (ImageView) convertView.findViewById(R.id.image3); 
      holder.image41 = (ImageView) convertView.findViewById(R.id.image4); 
      holder.image51 = (ImageView) convertView.findViewById(R.id.image5); 
      holder.zen1 = (TextView) convertView.findViewById(R.id.zen); 
      holder.cityname1 = (TextView) convertView.findViewById(R.id.cityname); 
      holder.rating1 = (TextView) convertView.findViewById(R.id.rating); 
      holder.text1 = (TextView) convertView.findViewById(R.id.text); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     ImageLoader.getInstance().displayImage(barDataList.get(position).getBar_image(), holder.date1, new ImageLoadingListener() { 
      @Override 
      public void onLoadingStarted(String imageUri, View view) { 
       // progressBar.setVisibility(View.VISIBLE); 
      } 

      @Override 
      public void onLoadingFailed(String imageUri, View view, FailReason failReason) { 
       // progressBar.setVisibility(View.GONE); 
      } 

      @Override 
      public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
       // progressBar.setVisibility(View.GONE); 
      } 

      @Override 
      public void onLoadingCancelled(String imageUri, View view) { 
       // progressBar.setVisibility(View.GONE); 
      } 
     }); 


     holder.zen1.setText(barDataList.get(position).getBarname()); 
     holder.cityname1.setText(barDataList.get(position).getLocation()); 
     holder.rating1.setText(barDataList.get(position).getRating()); 
     holder.text1.setText(barDataList.get(position).getAboutbar()); 




     return convertView; 
    } 

    class ViewHolder{ 

     ImageView date1; 
     ImageView image11; 
     ImageView image21; 
     ImageView image31; 
     ImageView image41; 
     ImageView image51; 
     TextView zen1; 
     TextView cityname1; 
     TextView rating1; 
     TextView text1; 


    } 
} 

}

fragment_home.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:clickable="true" 
android:orientation="vertical" 
tools:context="com.example.abhijeetsingh.drawer.HomeFragment"> 

<android.support.v4.view.ViewPager 
    android:layout_width="match_parent" 
    android:layout_height="170dp" 
    android:elevation="1dp" 
    android:id="@+id/viewPager2"> 

</android.support.v4.view.ViewPager> 

<ListView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginTop="170dp" 
    android:id="@+id/lvHome"> 
</ListView> 

homefragmentrow.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:descendantFocusability="blocksDescendants" 
> 

<ScrollView 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 


    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@id/relative1" 
     android:layout_marginTop="7dp" 
     android:background="@drawable/customborder"> 

     <ImageView 
      android:layout_width="40dp" 
      android:layout_height="30dp" 
      android:id="@+id/date" 
      android:paddingLeft="5dp" 
      android:layout_marginTop="10dp" 
      android:src="@drawable/tgif" 
      android:scaleType="fitXY" 
      /> 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="10dp" 
      android:id="@+id/line" 
      android:layout_below="@+id/date" 
      android:paddingLeft="5dp" 
      android:layout_marginTop="10dp" 
      android:src="@drawable/line" 
      android:scaleType="fitXY"/> 


     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="TGIF" 
      android:textSize="15dp" 
      android:id="@+id/zen" 
      android:textColor="#EF9C1A" 
      android:paddingTop="10dp" 
      android:layout_marginLeft="20dp" 
      android:layout_toRightOf="@+id/date" 
      /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/cityname" 
      android:layout_toRightOf="@+id/zen" 
      android:text="| B-25, Safdarjung, New Delhi" 
      android:layout_marginLeft="10dp" 
      android:paddingTop="10dp"/> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="50dp" 
      android:id="@+id/rating" 
      android:layout_below="@+id/line" 
      android:paddingLeft="5dp" 
      android:textColor="#000" 
      android:layout_marginTop="10dp" 
      android:text="Rated"/> 

     <ImageView 
      android:layout_width="20dp" 
      android:layout_height="20dp" 
      android:id="@+id/ratingimage" 
      android:layout_below="@+id/line" 
      android:layout_marginTop="10dp" 
      android:layout_marginLeft="2dp" 
      android:src="@drawable/rated" 
      android:layout_toRightOf="@+id/rating"/> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_toRightOf="@+id/ratingimage" 
      android:layout_below="@+id/line" 
      android:id="@+id/text" 
      android:layout_marginTop="10dp" 
      android:layout_marginLeft="20dp" 

      android:textSize="15dp" 
      android:text="It is a long established fact../> 

     <ImageView 
      android:id="@+id/image1" 
      android:layout_width="66dp" 
      android:layout_height="70dp" 
      android:scaleType="fitXY" 
      android:padding="5dp" 
      android:layout_marginTop="10dp" 
      android:layout_marginBottom="5dp" 
      android:layout_below="@+id/text" 
      android:src="@mipmap/ic_launcher"/> 
    </RelativeLayout> 

</ScrollView> 

+0

你們是不是要觸發項目點擊或全click事件列表點擊?因爲我可以看到你添加了點擊監聽器到ListView而不是列表項目 –

+0

整個列表點擊 –

+0

我想satnam在他的回答中放了什麼是好的,因爲在收到響應之前添加了監聽器,使得更容易測試響應;但如果答覆尚未收到,您將必須處理。 還有一件事,它建議的接口函數添加到片段,並調用它的點擊通過實現該接口在活動中添加調用活動的意圖過渡 –

回答

0

完成這一任務的AsyncTask外。

lvHome.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Bardata bardata = result.get(position); 
       Intent intent = new Intent(getActivity(), Individualbar.class); 
       intent.putExtra("bardata", new Gson().toJson(bardata)); 
       startActivity(intent); 
      } 
     }); 
    } else { 
     Toast.makeText(getActivity().getApplicationContext(), "Not able to fetch data from server, please check your internet.", Toast.LENGTH_SHORT).show(); 
    } 
+0

,但我想發送結果的意圖...如果我把它放在它之外顯示錯誤與我的結果。 –

+0

然後我怎麼能得到那裏的結果...你可以告訴你? –

+0

使用全局變量 – Masum

1

所做的FrameLayout裏可點擊它竊取clickEvent和Kistview是無法呼叫OnItemClick方法。

機器人:可點擊= 「真」

從刪除的FrameLayout上面的行。 它應該工作。

+0

我也嘗試過...但它不工作 –

1

請在onItemClick外面定義AsyncTask。

+0

兄弟如果我想發送城市名稱和一些更多的字符串值到服務器...在哪裏我應該通過... –

1

試試這個。

public class HomeAdapter extends ArrayAdapter { 

    private List<Bardata> barDataList; 
    private int resource; 
    private LayoutInflater inflater ; 

    public HomeAdapter(Context context, int resource, List<Bardata> objects) { 
     super(context, resource, objects); 
     barDataList = objects; 
     this.resource =resource; 
     inflater = (LayoutInflater)context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder holder = null; 

     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(resource, null); 
      holder.date1 = (ImageView) convertView.findViewById(R.id.date); 
      holder.image11 = (ImageView) convertView.findViewById(R.id.image1); 
      holder.image21 = (ImageView) convertView.findViewById(R.id.image2); 
      holder.image31 = (ImageView) convertView.findViewById(R.id.image3); 
      holder.image41 = (ImageView) convertView.findViewById(R.id.image4); 
      holder.image51 = (ImageView) convertView.findViewById(R.id.image5); 
      holder.zen1 = (TextView) convertView.findViewById(R.id.zen); 
      holder.cityname1 = (TextView) convertView.findViewById(R.id.cityname); 
      holder.rating1 = (TextView) convertView.findViewById(R.id.rating); 
      holder.text1 = (TextView) convertView.findViewById(R.id.text); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 


     Bardata data = barDataList.get(position); 
     convertView.setOnClickListener(new Listener(data)) 
     ImageLoader.getInstance().displayImage(data.getBar_image(), holder.date1, new ImageLoadingListener() { 
      @Override 
      public void onLoadingStarted(String imageUri, View view) { 
       // progressBar.setVisibility(View.VISIBLE); 
      } 

      @Override 
      public void onLoadingFailed(String imageUri, View view, FailReason failReason) { 
       // progressBar.setVisibility(View.GONE); 
      } 

      @Override 
      public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
       // progressBar.setVisibility(View.GONE); 
      } 

      @Override 
      public void onLoadingCancelled(String imageUri, View view) { 
       // progressBar.setVisibility(View.GONE); 
      } 
     }); 


     holder.zen1.setText(barDataList.get(position).getBarname()); 
     holder.cityname1.setText(barDataList.get(position).getLocation()); 
     holder.rating1.setText(barDataList.get(position).getRating()); 
     holder.text1.setText(barDataList.get(position).getAboutbar()); 




     return convertView; 
    } 

    class Listener implements View.OnClickListener { 
     private Bardata data; 

     Listener(Bardata data) { 
      this.data = data; 

     } 

     @Override 
     public void onClick(View v) { 

       Intent intent = new Intent(getActivity(), Individualbar.class); 
       intent.putExtra("bardata", new Gson().toJson(data)); 
       startActivity(intent); 
     } 
    } 

    class ViewHolder{ 

     ImageView date1; 
     ImageView image11; 
     ImageView image21; 
     ImageView image31; 
     ImageView image41; 
     ImageView image51; 
     TextView zen1; 
     TextView cityname1; 
     TextView rating1; 
     TextView text1; 


    } 
} 
+0

沒有rohit ..它也不工作bro ... –

+0

你需要設置監聽每個視圖在適配器試試這個 –

+0

thnk你兄弟你的幫助..我也會這樣.. –

0

這個答案是一個額外的問題在評論中問道:

如果你正在做一個GET調用,參數添加到URL像/get_call?parameter_1=value_1&parameter_2=value_2。如果是POSTPUT,則可以使用OutputStreamWriterBufferedWriter將參數放入網址。

例子:

OutputStreamWriter out = null; 
try { 
    out = new OutputStreamWriter(con.getOutputStream()); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
BufferedWriter bw = null; 
if (out != null) { 
    bw = new BufferedWriter(out); 
} else { 
    // Connection Error 
} 
try { 
    bw.write(parametersAsString); 
    bw.flush(); 
    bw.close(); 
} catch (IOException e1) { 
    e1.printStackTrace(); 
} 

可以使用JSONObject把參數和值,並把它們放在parametersAsString更換使用toString()功能

+0

我想發送城市名稱,並根據該城市的名稱得到值...從URL,... –

+0

你可以把城市名稱的參數,但水庫不能從url中檢索ult,而是在'onPostExecute'函數中檢索。您有一個列表作爲結果,因此您可以通過將城市名稱指定爲Fragment類的類變量來完成循環中所需的比較,這可以通過'PostExecute' –