Android ListView - вставьте Subview справа?

У меня есть ListView. Когда я выбираю элемент в ListView, я хотел бы, чтобы Subview скользил справа, как это происходит во многих приложениях.

Я искал учебники по этой теме, но крутит колеса. Может быть, Android использует термин, отличный от «Subview»?

Вот что я в итоге сделал:

  1. Создайте новый класс для вложенного представления

  2. Добавьте класс Subview в манифест с <activity android:name=".SubViewClassName" /> внутри тега <application>

  3. Добавьте это в основной класс («lv» - это ListView)

    lv.setOnItemClickListener (new OnItemClickListener () {
    public void onItemClick (родительский адаптер, представление представления, позиция int, длинный идентификатор) {

           Intent myIntent = new Intent(view.getContext(),SubView.class);
    
               startActivityForResult(myIntent, 0);  
    
       } 
    

    });


person Chris    schedule 11.06.2010    source источник
comment
В Android нет подпредставления, по крайней мере, не с таким названием.   -  person CommonsWare    schedule 11.06.2010
comment
Изображение чего? Я хочу щелкнуть элемент в ListView, а затем создать новый ListView в зависимости от того, какая строка была выбрана в исходном ListView.   -  person Chris    schedule 11.06.2010
comment
привет привет, как ты решил эту проблему? ответьте, пожалуйста..   -  person Mr. Sajid Shaikh    schedule 11.01.2012


Ответы (4)


Самый простой способ - разместить второй ListView в отдельном Activity. Если у пользователя включена анимация взаимодействия между действиями (и это значение по умолчанию), тогда ваш второй ListView будет скользить справа.

person CommonsWare    schedule 11.06.2010
comment
Вы также можете переопределить переход с помощью Activity.overridePendingTransition (), если хотите, чтобы пользователь выполнял переходы между действиями влево / вправо. - person Zargoon; 02.05.2013

Для этого вам нужно будет использовать ViewFlipper

Вот как бы вы настроили свой файл main.xml:

<?xml version="1.0" encoding="utf-8"?>
<ViewFlipper xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/flipper" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:versionCode="1" android:versionName="1.0">
  <include android:id="@+id/first" layout="@layout/home_screen" />
  <include android:id="@+id/second" layout="@layout/info_screen" />
</ViewFlipper>

Xml-файлами для двух представлений в данном случае являются home_screen и info_screen. Вы можете называть их как хотите.

В вашем коде вам нужно будет поместить это в свой метод onCreate ():

flipper = (ViewFlipper) findViewById(R.id.flipper);

Кроме того, вам понадобятся эти методы ниже вашего метода onCreate ().

    private Animation inFromRightAnimation() {

    Animation inFromRight = new TranslateAnimation(
            Animation.RELATIVE_TO_PARENT,  +1.0f, Animation.RELATIVE_TO_PARENT,  0.0f,
            Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,   0.0f
    );
    inFromRight.setDuration(800);
    inFromRight.setInterpolator(new AccelerateInterpolator());
    return inFromRight;
}
private Animation outToLeftAnimation() 
{
    Animation outtoLeft = new TranslateAnimation(
            Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,  -1.0f,
            Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,   0.0f
    );
    outtoLeft.setDuration(800);
    outtoLeft.setInterpolator(new AccelerateInterpolator());
    return outtoLeft;
}
private Animation inFromLeftAnimation() {
    Animation inFromLeft = new TranslateAnimation(
            Animation.RELATIVE_TO_PARENT,  -1.0f, Animation.RELATIVE_TO_PARENT,  0.0f,
            Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,   0.0f
    );
    inFromLeft.setDuration(800);
    inFromLeft.setInterpolator(new AccelerateInterpolator());
    return inFromLeft;
}
private Animation outToRightAnimation() {
    Animation outtoRight = new TranslateAnimation(
            Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,  +1.0f,
            Animation.RELATIVE_TO_PARENT,  0.0f, Animation.RELATIVE_TO_PARENT,   0.0f
    );
    outtoRight.setDuration(800);
    outtoRight.setInterpolator(new AccelerateInterpolator());
    return outtoRight;
}   

И когда вы будете готовы, просто используйте

flipper.setInAnimation(inFromRightAnimation());
flipper.setOutAnimation(outToRightAnimation());
flipper.showNext();   
person Ryan    schedule 11.06.2010
comment
Спасибо ... Я попробую и доложу. - person Chris; 11.06.2010
comment
Без проблем. Удачи с этим? - person Ryan; 16.06.2010

Возможно, я ошибаюсь, но вы можете использовать overridePendingTransition в этом вспомогательном действии?

В вашей основной деятельности:

public void onItemSelected(String id) {
    Intent myIntent= new Intent(this, MySubActivity.class);
        myIntent.putExtra("param1", param1); // some parameters
        startActivityForResult(myIntent, 0);
}

Или любой другой код, который вы хотите. Главное находится в вашей подактивности (и подвиде), как в MySubActivity:

protected void onCreate(Bundle savedInstanceState) {
    ...
    // autogenerated code and your code here
    ...
    this.overridePendingTransition(R.anim.enter_from_right, R.anim.exit_to_left);
 }

Вот файлы анимации в папке res/anim

enter_from_right.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:fromXDelta="100%" android:toXDelta="0%"
        android:fromYDelta="0%" android:toYDelta="0%"
        android:duration="700"/>
</set>

exit_to_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:fromXDelta="0%" android:toXDelta="-100%"
        android:fromYDelta="0%" android:toYDelta="0%"
        android:duration="700"/>
</set>

Надеюсь, это поможет.

person Solostaran14    schedule 18.10.2012

Небольшое дополнение к ответу Райана (с использованием ViewFlipper):

public void onShowRight(View v) {
    flipper.setInAnimation(inFromRightAnimation());
    flipper.setOutAnimation(outToLeftAnimation());
    flipper.showNext();         
}

public void onShowLeft(View v) {
    flipper.setInAnimation(inFromLeftAnimation());
    flipper.setOutAnimation(outToRightAnimation());
    flipper.showPrevious();         
}
person Roozbeh Zabihollahi    schedule 07.10.2013