0

I use a ListView with a custom adapter. Inside this adapter I want to use a HorizontalScrollView for displaying the full information in a row. I got long text so I have to scroll. Unfortunately my setOnItemClickListener does not recognize a click on it. It works if I delete the horizontalScrollView. I read a lot about this topic here the last few hours but nothing helps me out of this. So is it possible to receive events even if my ListView is scrollable in horizontal way too?

    public void show_alert() {

    final Dialog dia = new Dialog(this);

    dia.setContentView(R.layout.alert);

    dia.setTitle(String.format(res.getString(R.string.msg_11)));
    dia.setCancelable(true);

    list_alert = (ListView) dia.findViewById(R.id.alert_list);

    list_alert.setAdapter(new MainActivityArrayAdapter(this, GetProtokollFileNames()));                                            

    this.list_alert.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> arg0, View arg1, int pos,
                long arg3) {

            Toast.makeText(MainActivity.this,
                    "Item in position " + pos + " clicked", Toast.LENGTH_LONG).show();              
            dia.dismiss();
        }
    });               
    dia.show();
}

The class MainActivityArrayAdapter(...) uses the rowlayout.xml.

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.text.DecimalFormat;

import android.content.Context;
import android.content.pm.LabeledIntent;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivityArrayAdapter extends ArrayAdapter<String> {
  private final Context context;

  private String[] Values;

  public MainActivityArrayAdapter(Context context, String[] values) {
    super(context, R.layout.rowlayout, values);
    this.context = context;    
    Values = values;
  }

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

      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

      View rowView = inflater.inflate(R.layout.rowlayout, parent, false);


    return rowView;
  }
} 

rowlayout.xml

<HorizontalScrollView
    android:id="@+id/horizontalScrollView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:scrollbarAlwaysDrawVerticalTrack="false"
    android:scrollbarStyle="insideOverlay"
    android:scrollbars="none" >

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"                        
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
              android:orientation="vertical" >

                <ImageView
                    android:id="@+id/imageView1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_menu_name" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:orientation="vertical" >

                <TextView
                    android:id="@+id/lbl_datum"
                    android:clickable="false"
                    android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                    android:text="22.03.2013" />

                <TextView
                    android:id="@+id/lbl_time"
                    android:clickable="false"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="10:50:45" />
            </LinearLayout>              

            <Space
                android:layout_width="10dp"
                android:layout_height="match_parent" />

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:orientation="vertical" >

                <TextView
                    android:id="@+id/lbl_strasse"
                    android:clickable="false"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Straße" />

                <TextView
                    android:id="@+id/lbl_plz"
                    android:clickable="false"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="plz" />

                <TextView
                    android:id="@+id/lbl_ort"
                    android:clickable="false"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Ort" />
            </LinearLayout>

             <Space
                android:layout_width="10dp"
                android:layout_height="match_parent" />

            <LinearLayout
                android:layout_width="wrap_content"
                android:clickable="false"
                android:layout_height="match_parent"
                android:orientation="vertical" >

                <TextView
                    android:id="@+id/lbl_auftraggeber"
                    android:clickable="false"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Auftraggeber" />

                <TextView
                    android:id="@+id/textView5"
                    android:clickable="false"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
            </LinearLayout>

        </LinearLayout>

        <TextView
            android:id="@+id/lbl_bemerkung"
            android:clickable="false"
            android:layout_width="354dp"
            android:layout_height="wrap_content"
            android:paddingLeft="50dp"
            android:text="Bemerkung" />

    </LinearLayout>
</HorizontalScrollView>

alert.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:descendantFocusability="blocksDescendants"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/alert_list"
        android:clickable="true"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

    </ListView>

</LinearLayout>
afkiwers
  • 101
  • 2
  • 4
  • 13

2 Answers2

0

You can implement custom views (horizontalScrollView) and override some methods:

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
    boolean is_event = super.onInterceptTouchEvent(ev);
    if (is_event)
        getParent().requestDisallowInterceptTouchEvent(true);
    return ret;
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
    boolean is_event = super.onTouchEvent(ev);
    if (is_event)
        getParent().requestDisallowInterceptTouchEvent(true);
    return ret;
}  

Sample here

Community
  • 1
  • 1
Dyna
  • 2,304
  • 1
  • 14
  • 25
0

This code is the solution for your problem, you just have to write list_alert.setOnItemClickListener(...) ane also setClickable(true) for listView

Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.dialog);
dialog.setTitle("Your Title");
dialog.setCancelable(true);
dialog.show();

list_alert = (ListView) dialog.findViewById(R.id.alert_list);
list_alert.setClickable(true);

list_alert.setAdapter(new MainActivityArrayAdapter(this, GetProtokollFileNames()));                                            

list_alert.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> arg0, View arg1, int pos,
            long arg3) {

        Toast.makeText(MainActivity.this,
                "Item in position " + pos + " clicked", Toast.LENGTH_LONG).show();              
        dialog.dismiss();
    }
});         
Dhrumil
  • 1
  • 4
  • What do you mean with "setOnClick(true) for listView"? The problem is that I got a horizontal bar in it. without it works great. – afkiwers Aug 28 '13 at 06:58
  • There is no error. Nothing is happend. It seems that the listener not watching it correctly. – afkiwers Aug 28 '13 at 07:25
  • hey dear it just display the toast... it will do nothing because u won't perform any action in listener – Dhrumil Aug 28 '13 at 07:29
  • my toast does not appear. did you test it in your app? are you able to scroll left and right? – afkiwers Aug 28 '13 at 07:32
  • ya i try this in my app that's why i mgive u thus solution – Dhrumil Aug 28 '13 at 13:12
  • How I said before. If I throw out the horizontal scrollview it works too. I don't understand what are the differences between this both options. – afkiwers Aug 29 '13 at 06:40