Abhijeet Singh
Abhijeet Singh

Reputation: 45

list view setOnItemClickListener do nothing in fragment

setOnItemClickListener event doesn't work in Fragment.my setOnItemClickListener is in onPostExecute ...please help me out guys....thnx in advance.here is my code

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>

Upvotes: 0

Views: 462

Answers (5)

Rohit Heera
Rohit Heera

Reputation: 2737

Try this.

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;


    }
}

Upvotes: 1

Abdul-Rahman Ahmad
Abdul-Rahman Ahmad

Reputation: 163

This answer is for an additional question asked in the comments:

If you're doing a GET call, add the parameter to the URL like /get_call?parameter_1=value_1&parameter_2=value_2. If it's a POST or PUT, you can use OutputStreamWriter with BufferedWriter to put your parameters to url.

Example:

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();
}

You can use a JSONObject to put parameters and values, and put them in parametersAsString replacement by using toString() function

Upvotes: 0

J.range
J.range

Reputation: 459

Do onItemClick outside where you defined AsyncTask.

Upvotes: 1

AmniX
AmniX

Reputation: 653

You have Made the FrameLayout Clickable which is stealing the clickEvent and Kistview is unable to call OnItemClick Method.

android:clickable="true"

Remove above line from FrameLayout. It should work.

Upvotes: 1

user1682446
user1682446

Reputation:

Do this outside the 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();
    }

Upvotes: 0

Related Questions