Запуск активности из ListView - PullRequest
       32

Запуск активности из ListView

0 голосов
/ 12 декабря 2011

Мой список содержит восемь элементов, расположенных под строкой «заголовка», и все они находятся на вкладке в моем приложении. Я не могу понять, как перейти к действию (или, возможно, к другой вкладке), основываясь на элементе, выбранном в списке.

В настоящее время я расширяю класс Activity, но не уверен, что это проблема. Я пытался использовать onListItemClick, расширяя класс ListActivity; однако это вызвало сбой приложения.

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

public class Tab2 extends Activity {

    private ListView listView1;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tab2);

        Cinema cinema_data[] = new Cinema[]{
            new Cinema(R.drawable.blue, "Blue Cinema"),
            new Cinema(R.drawable.green, "Green Cinema"),
            new Cinema(R.drawable.purple, "Purple Cinema"),
            new Cinema(R.drawable.red, "Red Cinema"),
            new Cinema(R.drawable.yellow, "Gold Cinema"),
            new Cinema(R.drawable.blue, "Cyan Cinema"),
            new Cinema(R.drawable.green, "Lime Cinema"),
            new Cinema(R.drawable.purple, "Magenta Cinema")
        };

        CinemaAdapter adapter = new CinemaAdapter(this,
                R.layout.listview_item_row, cinema_data);

        listView1 = (ListView)findViewById(R.id.listView1);

        View header = (View)getLayoutInflater().inflate(R.layout.listview_header_row, null);
        listView1.addHeaderView(header);

        listView1.setAdapter(adapter);

    }   
}

любая помощь будет принята с благодарностью!

редактировать:

protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        try {
            Intent i = new Intent("android.lab.two.Tab1");
            startActivity(i);
        } catch(Exception e){
            e.printStackTrace();
        }
    }

Ответы [ 5 ]

1 голос
/ 12 декабря 2011

если OnItemClickListener не работает, вы можете попробовать установить его в своем адаптере:

в вашем адаптере, в методе getView, вы можете добавить OnClickListener к вашему представлению строки следующим образом:

public View getView(int arg0, View arg1, ViewGroup arg2) {
//Create the view for your row
    AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
    ViewGroup.LayoutParams.WRAP_CONTENT, 64);
    TextView rowView = new TextView(getApplicationContext());
    rowView.setLayoutParams(lp);
    rowView.setText("your value");
    rowView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           try {
                //Starting a new intent ( here a Dial Activity )
                Intent newIntent = new Intent(Intent.ACTION_DIAL);
                newIntent.setData(Uri.parse("tel:"+value));
                startActivity(newIntent);
            } catch (ActivityNotFoundException e) {
                Log.e("your application", "Dial failed", e);
            }
        }  
    });
}
0 голосов
/ 12 октября 2012

если вы устанавливаете метод onListItemClick () внутри вашей вкладки (действия), тогда вы должны использовать

protected void onListItemClick(ListView l, View v, int position, long id) 
{
            super.onListItemClick(l, v, position, id);

            Intent i = new Intent(this,tab1.class);
            startActivity(i);           
}

, если вы устанавливаете метод onListItemClick () для определения в другом классе, тогда вы должны использовать

protected void onListItemClick(ListView l, View v, int position, long id) 
{
            super.onListItemClick(l, v, position, id);

           Intent i = new Intent(v.getContext(),tab1.class);
           startActivity(i);            
}

если tab1 (действие) является основным действием, и вам нужно вызвать tab2 (действие) внутри tab1 (действие), то вы должны использовать этот способ ...

protected void onListItemClick(ListView l, View v, int position, long id) 
{
                super.onListItemClick(l, v, position, id);

                System.exit(0);               
}
0 голосов
/ 12 декабря 2011

Вы не можете начать действие с TabHost. Вы во внутреннем классе. Вы должны использовать NestedClasses. Вместо того, чтобы начинать Intent в вашем onClickListener, попробуйте Записать что-нибудь, и вы увидите, что это сработает. Log.d ( "LOG", "сообщение");

0 голосов
/ 12 декабря 2011
  1. Используйте метод setCurrentTab в TabHost, чтобы изменить вкладку на основе индекса элемента списка.
  2. Запустить намерение для самого этого действия, сохраняя его в режимах однократного запуска, а затем с помощью связанных данных изменитьвкладка через хост вкладок.

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

0 голосов
/ 12 декабря 2011

Вы просто устанавливаете прослушиватель кликов в своем списке. Вы получаете позицию и выполняете логику оттуда. Код ниже должен помочь вам начать. Я не знаю, какую ошибку вы получили, но мало что может пойти не так.

    listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {

            Intent myIntent = new Intent(view.getContext(),
                    NextClass.class);

            startActivity(myIntent);
        }
    });
...