2012-01-04 3 views
4

Я делаю lazyloading для отображения изображений и текста. У меня есть все, и теперь, пытаясь добавить текстовое представление в представление. Однако мой адаптер перекрывает мое представление. Более простые термины заключаются в том, что listview перекрывает текстовое представление. Я не уверен, где я делаю это неправильно, потому что original example способен отображать кнопку чуть ниже списка, но я не уверен. Я не получаю никаких ошибок. Мой список всего охватывает весь экран. Любая идея, что может быть проблемой?Android - LazyAdapter перекрывающиеся виды

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 (используемый 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> 
+0

Я не вижу ничего явно не так с вашим макет, который должен отображать «Тестирование 123» поверх списка элементов без проблем. Детали вашей деятельности могут потребоваться. – Jens

+0

Да точно. Я не вижу никаких проблем, но он наверняка перекрывает взгляды. Я подозреваю, что это от main.java – Hend

ответ

4

Просто удалите + символ из строки

android:layout_below="@+id/linear1" 

во второй линейной компоновки строфы.

+0

+1 Это должно сделать это, если я правильно задал вопрос ... – tidbeck

0

Добавить android:layout_alignParentTop="true" к вашей верхней 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

Когда вы говорите, что ListView охватывает весь экран, ссылаетесь ли вы на результат на реальном телефоне или, например, на экран. предварительный просмотр в Eclipse? Если он правильно отображается в последнем, то, скорее всего, проблема находится где-то в вашем Java-коде.

В любом случае, я, похоже, не могу воспроизвести вашу проблему ни на одном. Однако есть две вещи, которые я бы постарался:

Во-первых, измените порядок вызовов в методе onCreate() вашей деятельности. В частности, не выполняйте свою AsyncTask до тех пор, пока вы не инициализируете ListView, так как вы используете его в onPostExecute(). Хотя это, вероятно, не изменит ситуацию, вам лучше избегать любых шансов на гонку.

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

Во-вторых, файл макета, содержащий ваш ListView, излишне сложный. Желательно, чтобы вы максимально упростили макеты и ограничили вложенность для более плоской иерархии. Вы можете просто избавиться от устаревших LinearLayouts, и, если вы предпочитаете работать с ними, измените родительский на один. Кроме того, android:orientation="vertical" не является допустимым атрибутом RelativeLayout, поэтому убедитесь, что вы его удалили.

же RelativeLayout, но без 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> 

То же поведение, но с LinearLayout как корневой элемент:

<?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> 
Смежные вопросы