2013-04-30 3 views
0

У меня есть listview с footerview. Я добавил setOnClickListener для listview. Если я нажму на строку списка, появится сообщение с тостом. все работает нормально. Но моя проблема заключается в том, что если я нажму footerview (мне это не нужно, но есть возможность щелкнуть его пользователем), приложение будет разбито. Я не знаю, как решить эту проблему. Я пытаюсь контролировать тип вида. Бит, я не знаю, как найти вид TextView или нет? (Мой footerview - это TextView). Есть ли возможность решить эту проблему.Работа с просмотром списка

Что я хочу?

Если пользователь нажал на footerview, ничего не должно произойти.

ListView lv1 = (ListView) findViewById(R.id.myListView); 

ListAdapter adapter = new SimpleAdapter(this, mylist, R.layout.txnlist, 
       new String[] { "name", "mark"}, new int[] { 
         R.id.text1, R.id.text2 }) { 
      @Override 
      public View getView(int position, View convertView, ViewGroup parent) { 
       View v = convertView; 
       if (v == null) { 
        LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        v = vi.inflate(R.layout.txnlist, null); 
       } 
       Collection<Object> str = mylist.get(position).values(); 
       ArrayList<Object> al1 = new ArrayList<Object>(str); 
       TextView amnt = (TextView) v.findViewById(R.id.txntext2); 
       if (Integer.parseInt(al1.get(1).toString()) == 1) 
        amnt.setTextColor(Color.GREEN); 
       else if (Integer.parseInt(al1.get(1).toString()) == 2) 
        amnt.setTextColor(Color.RED); 
       return super.getView(position, v, parent); 
      } 
     }; 
TextView MyText = new TextView(this); 
MyText.setText("Finished"); 
lv1.addFooterView(MYText); 
lv1.setAdapter(adapter); 

setOnClickListener кодирования

lv1.setOnItemClickListener(new OnItemClickListener() { 

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { 

Collection<Object> str = mylist.get(arg2).values(); 
ArrayList<Object> al1 = new ArrayList<Object>(str); 

Toast.makeText(getApplicationContext(),al1.get(0)+" : "+al1.get(1), Toast.LENGTH_SHORT).show(); 

} 
}); 

И мой LogCat является:

04-30 17:24:34.908: E/AndroidRuntime(2619): FATAL EXCEPTION: main 
04-30 17:24:34.908: E/AndroidRuntime(2619): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1 
04-30 17:24:34.908: E/AndroidRuntime(2619):  at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) 
04-30 17:24:34.908: E/AndroidRuntime(2619):  at java.util.ArrayList.get(ArrayList.java:304) 
04-30 17:24:34.908: E/AndroidRuntime(2619):  at com.example.sample.DailyReportActivity$9.onItemClick(DailyReportActivity.java:396) 
04-30 17:24:34.908: E/AndroidRuntime(2619):  at android.widget.AdapterView.performItemClick(AdapterView.java:292) 
04-30 17:24:34.908: E/AndroidRuntime(2619):  at android.widget.AbsListView.performItemClick(AbsListView.java:1058) 
04-30 17:24:34.908: E/AndroidRuntime(2619):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514) 
04-30 17:24:34.908: E/AndroidRuntime(2619):  at android.widget.AbsListView$1.run(AbsListView.java:3168) 
04-30 17:24:34.908: E/AndroidRuntime(2619):  at android.os.Handler.handleCallback(Handler.java:605) 
04-30 17:24:34.908: E/AndroidRuntime(2619):  at android.os.Handler.dispatchMessage(Handler.java:92) 
04-30 17:24:34.908: E/AndroidRuntime(2619):  at android.os.Looper.loop(Looper.java:137) 
04-30 17:24:34.908: E/AndroidRuntime(2619):  at android.app.ActivityThread.main(ActivityThread.java:4424) 
04-30 17:24:34.908: E/AndroidRuntime(2619):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-30 17:24:34.908: E/AndroidRuntime(2619):  at java.lang.reflect.Method.invoke(Method.java:511) 
04-30 17:24:34.908: E/AndroidRuntime(2619):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
04-30 17:24:34.908: E/AndroidRuntime(2619):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
04-30 17:24:34.908: E/AndroidRuntime(2619):  at dalvik.system.NativeStart.main(Native Method) 

Каждая строка имеет две строки, кроме footerview. Поэтому я хочу игнорировать событие click footview. Является ли это возможным?

Заранее спасибо.

+0

Сообщение об аварии stacktrace. – rciovati

+0

разместите свой код и logcat, где вы получаете ошибку. –

+0

@rciovati, я опубликовал свой код и ошибку logcat. Взгляни, пожалуйста. – Gunaseelan

ответ

1
Toast.makeText(getApplicationContext(),al1.get(0)+" : "+al1.get(1), Toast.LENGTH_SHORT).show(); 

Убедитесь, что

Collection<Object> str = mylist.get(arg2).values(); 

Размер str всегда больше, что 1.

if(al1.size() > 1) 
{ 
    Toast.makeText(getApplicationContext(),al1.get(0)+" : "+al1.get(1), Toast.LENGTH_SHORT).show(); 
} 

Или

ListView#addHeaderView(View v, Object data, boolean isSelectable); 

Use this method to make the header or footer View not clickable.

+0

Нет друга. Каждая строка имеет две строки, кроме footerview. Поэтому я хочу игнорировать событие click footview. Является ли это возможным? – Gunaseelan

+0

Благодарю вас, друг. Я использовал [developer.android.com] (http://developer.android.com/reference/android/widget/ListView.html#addFooterView%28android.view.View,%20java.lang.Object,%20boolean%29). Он работает очень хорошо. – Gunaseelan

Смежные вопросы