Я использую Toast для отображения при щелчке ListViewItem, но тост не отображается

Я использую следующий код, где я хочу отобразить текст после щелчка элемента ListView. Но Toast не появляется при нажатии. Я использовал ArrayList для хранения элементов списка

 protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    linear_top_right = new LinearLayout(this);
    linear_top_right.setOrientation(LinearLayout.HORIZONTAL);

    linear_top_left = new LinearLayout(this);
    linear_top_left.setOrientation(LinearLayout.HORIZONTAL);

    linear_top = new LinearLayout(this);
    linear_top.setOrientation(LinearLayout.HORIZONTAL);

    linear_list = new LinearLayout(this);
    linear_list.setOrientation(LinearLayout.VERTICAL);

    linear_All = new LinearLayout(this);
    linear_All.setOrientation(LinearLayout.VERTICAL);

    btn_delete = new Button(this);
    btn_delete.setBackgroundResource(R.drawable.select_minus);
    btn_delete.setWidth(15);
    btn_delete.setHeight(15);

    btn_add = new Button(this);
    btn_add.setBackgroundResource(R.drawable.select_add);
    btn_add.setWidth(15);
    btn_add.setHeight(15);

    linear_top_right.addView(btn_delete);
    linear_top_right.addView(btn_add);


    chk_select_all = new CheckBox(this);
    chk_src_to_dest = new CheckBox(this);

    chk_select_all.setText("All");
    chk_src_to_dest.setText("SRC to Dest");

    linear_top_left.addView(chk_select_all);
    linear_top_left.addView(chk_src_to_dest);

    listView = new ListView(this);
    linear_list.addView(listView);

    dataAdapter = new MyCustomAdapter(this, R.layout.row_create_list,
            allWordList);
    listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    listView.setAdapter(dataAdapter);

    linear_top_right.setLayoutParams(new LayoutParams(
            LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    linear_top_right.setGravity(Gravity.RIGHT);

    linear_top_left.setLayoutParams(new LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    linear_top.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT));

    linear_list.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT));

    RelativeLayout relative1 = new RelativeLayout(this);
    relative1.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT));

    linear_top.addView(linear_top_left);
    linear_top.addView(linear_top_right);
    linear_All.addView(linear_top);
    linear_All.addView(linear_list);
    relative1.addView(linear_All);
    setContentView(relative1);

    final Thread thread = new Thread(){
        @Override
       public void run() {
            try {
               Thread.sleep(5000); // As I am using LENGTH_LONG in Toast
               PracticeTest.this.finish();
           } catch (Exception e) {
               e.printStackTrace();
           }
        }  
      };

//Здесь я использовал щелчок по списку

 listView.setOnItemClickListener(new OnItemClickListener() {
     @Override
     public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            Toast.makeText(PracticeTest.this,"BETA VERSION",
                       Toast.LENGTH_LONG).show();
            //thread.start();
            WordList list = (WordList) parent.getItemAtPosition(position);
            String listId = list.ListId;
            String listName = list.ListName;
            Intent intent = new Intent(PracticeTest.this,
                    TestListActivity.class);
            intent.putExtra(Constant.LIST_ID, listId);
            intent.putExtra(Constant.LIST_NAME, listName);

            PracticeTest.this.startActivity(intent);
        }
    });
    chk_src_to_dest
            .setOnCheckedChangeListener(new OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton button,
                        boolean checked) {
                    FromSrcToDes = checked;
                }
            });

    chk_select_all
            .setOnCheckedChangeListener(new OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton button,
                        boolean checked) {
                    for (WordList list : allWordList) {
                        list.Ischecked = checked;
                    }
                    dataAdapter.notifyDataSetChanged();
                }
            });

    btn_delete.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            int itemCount = allWordList.size();
            for (int i = itemCount - 1; i >= 0; i--) // for(WordList list :
                                                        // allWordList)
            {
                WordList list = allWordList.get(i);
                if (list.Ischecked == true) {
                    Util.deleteListId(PracticeTest.this, list.ListId);
                }
            }

            loadAllLists(); // dataAdapter.notifyDataSetChanged(); //
            chk_select_all.setChecked(false);
        }
    });

    btn_add.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent intent = new Intent(PracticeTest.this,
                    AddWordsToList.class);
            intent.putExtra(Constant.LIST_ID, "");
            PracticeTest.this.startActivity(intent);

        }
    });
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();

    if (chk_select_all != null)
        chk_select_all.setChecked(false);
    loadAllLists();
}

private void loadAllLists() {
    allWordList.clear();
    String[] listIds = Util.getListIds(this);
    for (int i = 0; i < listIds.length; i++) {
        String listid = listIds[i];
        if (!"".equals(listid)) {
            WordList list = null;
            list = Util.getListData(listid, this);
            if (list != null)
                allWordList.add(list);
        }
    }

    dataAdapter = new MyCustomAdapter(this, R.layout.row_create_list,
            allWordList);
    listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    listView.setAdapter(dataAdapter);

    listView.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // When clicked, show a toast with the TextView text
            // give test

            WordList list = (WordList) parent.getItemAtPosition(position);
            String listId = list.ListId;
            String listName = list.ListName;
            Intent intent = new Intent(PracticeTest.this,
                    TestListActivity.class);
            intent.putExtra(Constant.LIST_ID, listId);
            intent.putExtra(Constant.LIST_NAME, listName);
            PracticeTest.this.startActivity(intent);
        }
    });
}

private class MyCustomAdapter extends ArrayAdapter<WordList> {

    private ArrayList<WordList> list;

    public MyCustomAdapter(Context context, int textViewResourceId,
            ArrayList<WordList> list) {
        super(context, textViewResourceId, list);
        this.list = list;
    }

    private class ViewHolder {
        CheckBox checkBx;
        TextView txt_result;
    }

    @Override
    public View getView(final int position, View convertView,
            ViewGroup parent) {

        ViewHolder holder = null;

        if (convertView == null) {

            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = vi.inflate(R.layout.row_create_list, null);

            holder = new ViewHolder();
            holder.checkBx = (CheckBox) convertView
                    .findViewById(R.id.checkBox1);
            holder.txt_result = (TextView) convertView
                    .findViewById(R.id.txt_result);
            holder.checkBx
                    .setOnCheckedChangeListener(new OnCheckedChangeListener() {
                        @Override
                        public void onCheckedChanged(CompoundButton button,
                                boolean checked) {

                            list.get(position).Ischecked = checked;
                        }
                    });

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.checkBx.setText(list.get(position).ListName);
        holder.checkBx.setChecked((list.get(position).Ischecked));
        if (list.get(position).TotalWordsAttampted > 0) {
            holder.txt_result.setText("Last attempt "
                    + list.get(position).RightAnswers + "/"
                    + list.get(position).TotalWordsAttampted);
        }
        return convertView;
    }

}

person Amol Bharmoria    schedule 14.03.2014    source источник
comment
вы получаете какую-либо ошибку или исключение?   -  person Spring Breaker    schedule 14.03.2014
comment
Код выглядит нормально. Можете ли вы опубликовать макет для строки списка   -  person Raghunandan    schedule 14.03.2014
comment
onItemClick() мметод называется?   -  person Rohit    schedule 14.03.2014
comment
Никаких исключений... он работает хорошо, но Toast не появляется на экране.   -  person Amol Bharmoria    schedule 14.03.2014
comment
Можете ли вы опубликовать свой полный код с xml, чтобы лучше разобраться в проблеме.   -  person Born To Win    schedule 14.03.2014
comment
Макет для списка LinearLayout   -  person Amol Bharmoria    schedule 14.03.2014
comment
попробуйте @Override в вашем методе onItemClick()   -  person Kunu    schedule 14.03.2014
comment
Нет, я не вызывал onItemCLick() явно .... но все остальное работает, как создание намерений и потоков, но только Toast не появляется   -  person Amol Bharmoria    schedule 14.03.2014
comment
@kunu, выполняющий Override, не сработал   -  person Amol Bharmoria    schedule 14.03.2014
comment
Я поставил под сомнение весь код... @Raghunandan   -  person Amol Bharmoria    schedule 14.03.2014
comment
@user3414076 user3414076, можете ли вы опубликовать свой XML-макет, который вы надули в getView?   -  person Raghunandan    schedule 14.03.2014
comment
‹?xml version=1.0 encoding=utf-8?› ‹RelativeLayout xmlns:android=schemas.android .com/apk/res/android android:layout_width=fill_parent android:layout_height=wrap_content android:orientation=vertical android:padding=6dip › ‹CheckBox android:id=@+id/checkBox1 android:layout_width=wrap_content android :layout_height=wrap_content android:layout_alignParentLeft=true android:focusable=false android:focusableInTouchMode=false android:text=checkbox /› @Raghunandan   -  person Amol Bharmoria    schedule 14.03.2014
comment
‹TextView android:id=@+id/txt_result android:layout_width=wrap_content android:layout_height=wrap_content android:layout_alignParentRight=true android:layout_centerVertical=true android:text= /› ‹/RelativeLayout› @Raghunandan Это макет xml   -  person Amol Bharmoria    schedule 14.03.2014


Ответы (3)


Добавь это

android:descendantFocusability="blocksDescendants"

К корневому элементу в xml

Когда вы нажимаете на элемент списка, флажок становится активным. Поэтому добавьте вышеуказанное в RelativeLayout в xml и перезапустите приложение.

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

Присмотревшись, у вас уже есть android:focusableInTouchMode="false", так что описанное выше может не сработать.

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

Я пробовал ваш код только со строками с таким же макетом

public class MainActivity extends Activity
{
 LinearLayout linear_top_right,linear_top_left,linear_top,linear_All,linear_list;
 Button btn_delete,btn_add;
 CheckBox chk_select_all, chk_src_to_dest;
 ListView listView; 
 MyCustomAdapter dataAdapter;
 String allWordList[]= {"A","B","C"};
 @Override
 protected void onResume() {
     // TODO Auto-generated method stub
     super.onResume();

     if (chk_select_all != null)
         chk_select_all.setChecked(false);

 }
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    linear_top_right = new LinearLayout(this);
    linear_top_right.setOrientation(LinearLayout.HORIZONTAL);

    linear_top_left = new LinearLayout(this);
    linear_top_left.setOrientation(LinearLayout.HORIZONTAL);

    linear_top = new LinearLayout(this);
    linear_top.setOrientation(LinearLayout.HORIZONTAL);

    linear_list = new LinearLayout(this);
    linear_list.setOrientation(LinearLayout.VERTICAL);

    linear_All = new LinearLayout(this);
    linear_All.setOrientation(LinearLayout.VERTICAL);

    btn_delete = new Button(this);

    btn_delete.setWidth(15);
    btn_delete.setHeight(15);

    btn_add = new Button(this);

    btn_add.setWidth(15);
    btn_add.setHeight(15);

    linear_top_right.addView(btn_delete);
    linear_top_right.addView(btn_add);


    chk_select_all = new CheckBox(this);
    chk_src_to_dest = new CheckBox(this);

    chk_select_all.setText("All");
    chk_src_to_dest.setText("SRC to Dest");

    linear_top_left.addView(chk_select_all);
    linear_top_left.addView(chk_src_to_dest);

    listView = new ListView(this);
    linear_list.addView(listView);

    dataAdapter = new MyCustomAdapter(this, R.layout.m,
            allWordList);
    listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    listView.setAdapter(dataAdapter);

    linear_top_right.setLayoutParams(new LayoutParams(
            LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    linear_top_right.setGravity(Gravity.RIGHT);

    linear_top_left.setLayoutParams(new LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    linear_top.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT));

    linear_list.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT));

    RelativeLayout relative1 = new RelativeLayout(this);
    relative1.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT));

    linear_top.addView(linear_top_left);
    linear_top.addView(linear_top_right);
    linear_All.addView(linear_top);
    linear_All.addView(linear_list);
    relative1.addView(linear_All);
    setContentView(relative1);

    final Thread thread = new Thread(){
        @Override
       public void run() {
            try {
               Thread.sleep(5000); // As I am using LENGTH_LONG in Toast
               MainActivity.this.finish();
           } catch (Exception e) {
               e.printStackTrace();
           }
        }  
      };
//Here I have used listview click


    chk_src_to_dest
            .setOnCheckedChangeListener(new OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton button,
                        boolean checked) {

                }
            });

    chk_select_all
            .setOnCheckedChangeListener(new OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton button,
                        boolean checked) {

                }
            });

    btn_delete.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {


        }
    });

    btn_add.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

        }
    });




    dataAdapter = new MyCustomAdapter(this, R.layout.m,
            allWordList);
    listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    listView.setAdapter(dataAdapter);
    listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                   int position, long id) {
               Toast.makeText(MainActivity.this,"BETA VERSION",
                          Toast.LENGTH_LONG).show();



           }
       });
}

private class MyCustomAdapter extends ArrayAdapter<String> {

    private String[] list;

    public MyCustomAdapter(Context context, int textViewResourceId,
            String[] allWordList) {
        super(context, textViewResourceId, allWordList);
        this.list = allWordList;
    }

    private class ViewHolder {
        CheckBox checkBx;
        TextView txt_result;
    }

    @Override
    public View getView(final int position, View convertView,
            ViewGroup parent) {

        ViewHolder holder = null;

        if (convertView == null) {

            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = vi.inflate(R.layout.m, null);

            holder = new ViewHolder();
            holder.checkBx = (CheckBox) convertView
                    .findViewById(R.id.checkBox1);
            holder.txt_result = (TextView) convertView
                    .findViewById(R.id.txt_result);


            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }


        return convertView;
    }

}

m.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:descendantFocusability="blocksDescendants"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="6dip" >

    <CheckBox
        android:id="@+id/checkBox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="checkbox" />

    <TextView
        android:id="@+id/txt_result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:text=" " />

</RelativeLayout>

Щелчок

введите здесь описание изображения

person Raghunandan    schedule 14.03.2014
comment
@ user3414076 будет. перепроверить еще раз. У вас есть флажок в макете - person Raghunandan; 14.03.2014
comment
@user3414076 user3414076 также у вас есть тема. где вы называете начало? - person Raghunandan; 14.03.2014
comment
@user3414076 user3414076 я утомил ваш код только строками и сделал предложение, опубликованное в моем посте, оно работает - person Raghunandan; 14.03.2014

изменить контекст тоста на:

Toast.makeText(getApplicationContext(),"BETA VERSION",
                   Toast.LENGTH_LONG).show();
person Parnit    schedule 14.03.2014

Это происходит из-за прослушивателей кликов, доступных в вашем элементе ListView (в данном случае флажок).

Вы должны добавить ниже к своим флажкам (они будут работать как обычно :)),

android:focusable="false"
android:focusableInTouchMode="false"

Аналогичное решение здесь.

person Atul O Holic    schedule 14.03.2014
comment
это уже там. посмотри его комментарий android:focusable="false" android:focusableInTouchMode="false" android:text="checkbox" /> @Raghunandan - person Raghunandan; 14.03.2014
comment
Мой плохой, пропустил это. @user3414076 user3414076 - Попробуйте добавить то же самое в TextView. - person Atul O Holic; 14.03.2014
comment
Если это все еще не работает, используя приведенный выше ответ и ответ @Raghunandan, тогда есть обходной путь, но я не буду этого предлагать. Делайте это только тогда, когда вы ничего не найдете на нем. Назначьте идентификатор вашему RelativeLayout для ListItem, раздуйте его в getView, как вы сделали для своего CheckBox, и добавьте сюда код onClick ListItem. (На свой страх и риск ;-)) - person Atul O Holic; 14.03.2014