4

I am doing lazyloading to display images and text. I have got everything up and now, trying to add a textview in the view. However, my adapter is overlapping my view. Simpler terms is that, the listview is overlapping the textview. I'm not sure where I'm doing it wrong because the original example is able to display a button just below the listview but I'm not. I'm not getting any errors. My listview just covers the whole screen. Any idea what might be the problem?

main.java

public class main extends Activity {

private static final String targetURL ="http://www.google.com/images";
ListView list;

ProgressDialog dialog;
private String[] mStrings = {};
private String[] dStrings = {};
//TextView tv;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);         
    new TheTask().execute();
    list=(ListView)findViewById(R.id.list);
    TextView tv = (TextView)findViewById(R.id.tv);

    //tv.setText("Text View is displayed");
}   


protected class TheTask extends AsyncTask<Void, Void, MyResultClass >{

    protected void onPreExecute() {
        dialog = ProgressDialog.show(Cats.this, "Retrieving Information", "Please wait for few seconds...", true, false);
        dialog.setCancelable(true);
    }

    protected MyResultClass doInBackground(Void... params) {
        searchContent();
        MyResultClass result = new MyResultClass();
        result.mStrings = mStrings;
        result.dStrings = dStrings;
        return result;
    }   

    protected void onPostExecute(MyResultClass result) {            
        dStrings = result.dStrings;
        mStrings = result.mStrings;         
        LazyAdapter adapter = new LazyAdapter(Cats.this, mStrings, dStrings);
        list.setAdapter(adapter);
        dialog.dismiss();
    }       
}

    class MyResultClass
    { 
        public String[] mStrings; 
        public String[] dStrings; 
    }

public void searchContent()
{
    String imageC = "";
    String textC = "";

    try {

        URL url = new URL(targetURL);

        // Make the connection
        URLConnection conn = url.openConnection();
        BufferedReader reader = new BufferedReader(
         new InputStreamReader(conn.getInputStream()));

        String line = reader.readLine();
        Pattern sChar = Pattern.compile("&.*?;");
        line.replaceAll("\\<.*?\\>", "");
        Matcher msChar = sChar.matcher(line);
        while (msChar.find()) line = msChar.replaceAll("");

        while (line != null) {

            if(line.contains("../../"))
            {

                int startIndex = line.indexOf("../../") + 6;
                int endIndex = line.indexOf(">", startIndex + 1);
                String abc = "http://www.google.com/";
                String imageSrc = line.substring(startIndex,endIndex);
                //complete full url
                String xyz = abc +imageSrc;
                xyz = xyz.substring(0,xyz.indexOf('"'));
                xyz = xyz +";";
                xyz = xyz.replaceAll(" ", "%20");
                imageC += xyz;                  
                mStrings = imageC.split(";");
                line = reader.readLine();
            }

            if(line.contains("../../") == false)
            {
                line = reader.readLine();
            }

            if (line.contains("Gnametag"))
            {
                int startIndex = line.indexOf("Gnametag") + 10;
                int endIndex = line.indexOf("<", startIndex + 1);
                String gname = line.substring(startIndex,endIndex);
                textC = textC.replaceAll("</span>", "");
                textC += "Name: "+gname+ "\n";
            }

                if (line.contains("Age"))
                {
                    textC += "Age: "+reader.readLine() + "\n" + ";";
                    textC = textC.replaceAll("                  ", "");
                    dStrings = textC.split(";");
                }

            if (line.contains("Last Update"))
            {
                reader.close();
            }                               
        }           

        // Close the reader
        reader.close();

    } catch (Exception ex) {
        ex.printStackTrace();           
    }     

}
}

Adapter.java

public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    ViewHolder holder;
    if(convertView==null){
        vi = inflater.inflate(R.layout.item, null);
        holder=new ViewHolder();
        holder.text=(TextView)vi.findViewById(R.id.text);;
        holder.image=(ImageView)vi.findViewById(R.id.image);
        vi.setTag(holder);
    }
    else
        holder=(ViewHolder)vi.getTag();

    holder.text.setText(text[position]);
    holder.image.setTag(data[position]);
    imageLoader.DisplayImage(data[position], activity, holder.image);
    return vi;
}

item.xml (used by Adapter.java)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#FFFFFF">
<ImageView
  android:id="@+id/image"
  android:layout_width="90dip"
  android:layout_height="90dip" 
  android:src="@drawable/stub" 
  android:scaleType="centerCrop"
  android:layout_gravity="left|center_vertical" 
  />

<TextView
  android:id="@+id/text"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:gravity="center"
  android:textSize="15dip"/>

</LinearLayout>

main.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF">

<LinearLayout
android:id="@+id/linear1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#FFFFFF">

<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Testing 123"
/> 

</LinearLayout>

<LinearLayout
android:id="@+id/linear2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"    
android:layout_below="@+id/linear1"
android:background="#FFFFFF">

<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="30dp"/>
</LinearLayout>

</RelativeLayout>
Hend
  • 589
  • 5
  • 15
  • 35
  • I can't see anything explicitly wrong with your layout, that should display "Testing 123" on top of a list of items without problem. Details from your activity could be required. – Jens Jan 04 '12 at 12:55
  • Yes exactly. I do not see any problems but it sure is overlapping the views. I am suspecting it's from main.java – Hend Jan 05 '12 at 13:25

3 Answers3

4

Just remove the + symbol from this line

android:layout_below="@+id/linear1"

in second linear layout stanza.

Ron
  • 24,175
  • 8
  • 56
  • 97
0

Add android:layout_alignParentTop="true" to your top LinearLayout (linear1)

<LinearLayout
    android:id="@+id/main_xml_linearlayout_one"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    >

    <TextView
        android:id="@+id/main_xml_textview_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</LinearLayout>

<LinearLayout
    android:id="@+id/main_xml_linearlayout_two"
    android:layout_below="@id/main_xml_linearlayout_one"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#FFFFFF" >

    <ListView
        android:id="@+id/main_xml_listview_list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="30dp"/>

</LinearLayout>

roxrook
  • 13,511
  • 40
  • 107
  • 156
0

When you say the ListView covers the whole screen, do you refer to the result on an actual phone or e.g. the preview in Eclipse? If it shows up correctly in the latter, then likely the issue is somewhere in your Java code.

Anyways, I don't seem to be able to reproduce your problem on either one. However, there are two things I would try:

First, change the order of calls in the onCreate() method of your Activity. Specifically, don't execute your AsyncTask until after you've initialized the ListView, since you're using it in the onPostExecute(). Although this probably won't make a difference, you'd better avoid any chances on a race condition.

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);         

    list=(ListView)findViewById(R.id.list);
    TextView tv = (TextView)findViewById(R.id.tv);
    // start task after 'list' is initialized.
    new TheTask().execute();
}   

Secondly, the layout file containing your ListView is unnecessarily complicated. Preferably you want to keep layouts as simple as possible and limit the nesting for a more flat hierarchy. You could simply get rid of the absolete LinearLayouts, and, if you prefer working with them, change the parent to one. Also, android:orientation="vertical" is not a valid attribute for a RelativeLayout, so make sure you remove that.

Same RelativeLayout, but without the LinearLayouts:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF" >

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Testing 123" />

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv"
        android:layout_marginBottom="30dp" />

</RelativeLayout>

Same behaviour, but with a LinearLayout as root element:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#FFFFFF"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Testing 123" />

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_marginBottom="30dp" />

</LinearLayout>
MH.
  • 45,303
  • 10
  • 103
  • 116