Android - LazyAdapter overrides views

I am doing lazyloading to display images and text. I have everything, and now, trying to add a text view to the view. However, my adapter overlaps my view. Simpler terms are that listview overrides the text view. I am not sure where I am doing it wrong, because the original example is able to display a button just below the list, but I don’t, I get no errors. My list of everything covers the entire screen. Any idea what could 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 (using 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> 
+4
source share
3 answers

Just remove the + character from this line

 android:layout_below="@+id/linear1" 

in the second line of the line layout.

+4
source

Add android:layout_alignParentTop="true" to the top of 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> 

0
source

When you say that a ListView spans the entire screen, whether you are referring to the result on a real phone or, for example, to a screen. preview in eclipse? If it displays correctly in the latter, then most likely the problem is somewhere in your Java code.

In any case, I seem to be unable to reproduce your problem on any. However, there are two things that I would like to try:

First, reorder the calls in the onCreate() method of your activity. In particular, do not execute your AsyncTask until you initialize the ListView, since you are using it in onPostExecute() . Although this probably will not change the situation, you better avoid any chance of a race.

 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. It is advisable that you simplify layouts as much as possible and limit nesting for a flatter hierarchy. You can simply get rid of the obsolete LinearLayouts, and if you prefer to work with them, change the parent to one. Furthermore, android:orientation="vertical" not a valid attribute for RelativeLayout, so make sure you delete it.

Same RelativeLayout, but without 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 behavior, but with LinearLayout as the 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> 
0
source

Source: https://habr.com/ru/post/1389262/


All Articles