-1

I have problem with a simple relative layout. The green TextView (id=subtitle) disappears at runtime. Why?

Edit: The problem only exists when i use this layout in a ListView!!!

aaa.xml:

    <ImageView
        android:id="@+id/image"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_alignParentLeft="true"
        android:src="@drawable/ic_launcher"
        />

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/image"
        android:maxLines="2"
        android:minLines="1"
        android:ellipsize="end"
        android:gravity="center_vertical|right"
        android:text="Title"
        android:background="#ff0000"
        />

    <TextView
        android:id="@+id/subtitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/image"
        android:layout_above="@+id/subsubtitle"
        android:lines="1"
        android:ellipsize="end"
        android:gravity="center_vertical|right"
        android:text="Subtitle"
        android:background="#00ff00"
        />

    <TextView
        android:id="@+id/subsubtitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_toRightOf="@+id/image"
        android:lines="1"
        android:ellipsize="end"
        android:gravity="center_vertical|right"
        android:text="SubSubtitle"
        android:background="#0000ff"
        />

</RelativeLayout>

ListView Adapter:

public class AdsAdapter extends BaseAdapter {

    Context mContext;

    List<...> mArray;

    public AdsAdapter(Context context) {
        mContext= context;
        mArray= new ArrayList<>();
    }

    public void setData(List<...> data) {
        this.mArray = data;
    }

    @Override
    public int getCount() {
        return mArray.size();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return getViewGroup(convertView);
    }

    public ViewGroup getViewGroup(View reuse)
    {
        if(reuse instanceof ViewGroup)
            return (ViewGroup)reuse;

        LayoutInflater inflater = LayoutInflater.from(mContext);
        ViewGroup item = (ViewGroup)inflater.inflate(R.layout.aaa, null);

        return item;
    }
}

enter image description here

Mbt925
  • 1,317
  • 1
  • 16
  • 31

4 Answers4

1

Just Replace your susubTitle TextView with below TextView

<TextView
    android:id="@+id/subsubtitle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@id/image"
    android:layout_toRightOf="@+id/image"
    android:background="#0000ff"
    android:ellipsize="end"
    android:gravity="center_vertical|right"
    android:lines="1"
    android:text="SubSubtitle" />

enter image description here

Ajit Kumar Dubey
  • 1,383
  • 1
  • 19
  • 33
0

try android:layout_alignParentRight="true" otherwise code seems good if it does solve please reply

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingRight="5dp"
    >

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>

</RelativeLayout>

adsAdapter.java

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class AdsAdapter extends BaseAdapter {

    private LayoutInflater inflator;
    Context mContext;

    List<Model> mArray;

    public AdsAdapter(Context context, List<Model> mArray) {
        mContext= context;
        this.mArray= mArray;
        inflator = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return mArray.size();
    }

    @Override
    public Model getItem(int i) {
        return mArray.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if(convertView == null){
            convertView = inflator.inflate(R.layout.item_list, parent, false);
            viewHolder = new ViewHolder();
            viewHolder.title = (TextView) convertView.findViewById(R.id.title);
            viewHolder.subtitle = (TextView) convertView.findViewById(R.id.subtitle);
            viewHolder.subsubtile = (TextView) convertView.findViewById(R.id.subsubtitle);
            convertView.setTag(viewHolder);
        }else{
            viewHolder = (ViewHolder) convertView.getTag();
        }
        viewHolder.title.setText(mArray.get(position).getTitle());
        viewHolder.subtitle.setText(mArray.get(position).getSubtitle());
        viewHolder.subsubtile.setText(mArray.get(position).getSubsubtitle());
        return convertView;
    }

    class ViewHolder{
        TextView title, subtitle, subsubtile;
    }


}

MainActivity.java

import android.graphics.AvoidXfermode;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private ListView listView;
    List<Model> mArray = new ArrayList<Model>();
    private AdsAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView)findViewById(R.id.listview);

        for(int i = 0; i<10; i++){
            Model model = new Model("title"+i, "subtile"+i, "subsubtitle"+i);
            mArray.add(model);
        }

        adapter = new AdsAdapter(this, mArray);
        listView.setAdapter(adapter);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

Model.java

public class Model {

    public Model(String title, String subtitle, String subsubtitle) {
        this.title = title;
        this.subtitle = subtitle;
        this.subsubtitle = subsubtitle;
    }

    String title;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getSubtitle() {
        return subtitle;
    }

    public void setSubtitle(String subtitle) {
        this.subtitle = subtitle;
    }

    public String getSubsubtitle() {
        return subsubtitle;
    }

    public void setSubsubtitle(String subsubtitle) {
        this.subsubtitle = subsubtitle;
    }

    String subtitle;
    String subsubtitle;
}

item_list.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="120dp"
    android:paddingRight="5dp"
    >

    <ImageView
        android:id="@+id/image"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_alignParentLeft="true"
        android:src="@mipmap/ic_launcher"
        />

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/image"
        android:maxLines="2"
        android:minLines="1"
        android:ellipsize="end"
        android:gravity="center_vertical|right"
        android:text="Title"
        android:background="#ff0000"
        />

    <TextView
        android:id="@+id/subtitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/image"
        android:layout_above="@+id/subsubtitle"
        android:lines="1"
        android:layout_alignParentRight="true"
        android:ellipsize="end"
        android:gravity="center_vertical|right"
        android:text="Subtitle"
        android:background="#00ff00"
        />

    <TextView
        android:id="@+id/subsubtitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_toRightOf="@+id/image"
        android:lines="1"
        android:ellipsize="end"
        android:gravity="center_vertical|right"
        android:text="SubSubtitle"
        android:background="#0000ff"
        />

</RelativeLayout>

I did this and its working fine

0

I didn't try your code, but I have same layout in on of my app and I used below structure to get it. And it works fine for me.

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/image"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:src="@drawable/andriodicon"
        />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:orientation="vertical"
        android:paddingLeft="5dp" >

        <TextView
            android:id="@+id/title"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:textStyle="bold" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/subtitle"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                 />

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

and also If I get time, I will try your code and let you know.

Vishal Makasana
  • 960
  • 2
  • 7
  • 15
-1

just change the following code in xml layout

<TextView
        android:id="@+id/subtitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/title"
        android:layout_marginTop="60dp"
        android:layout_toRightOf="@+id/image"
        android:background="#00ff00"
        android:ellipsize="end"
        android:gravity="center_vertical|right"
        android:lines="1"
        android:text="Subtitle" />
Arjun Mehta
  • 100
  • 1
  • 8