【问题标题】:Implementing OnItemSelectedListener On a ListView在 ListView 上实现 OnItemSelectedListener
【发布时间】:2014-03-27 09:44:05
【问题描述】:

嘿,我正在尝试让 Listener 工作,应用程序运行并且一切都很好,但是当我在 ListView 中选择一个项目时,我收到 Null pointer exception 错误

java.lang.RuntimeException: Unable to start activity ComponentInfo{code.me/code.me.QuestionActivity}: java.lang.NullPointerException

public class ItemListFragment extends android.app.ListFragment 
{
    ListView lv;
    Context c;
    List<Question> questions= new ArrayList<Question>();
    Integer[] Q_Id ;
    String[] AskerUserName =   {"Jack"      ,"John"    ,"Lio"      ,"Sam"         ,"Mike"        };
    String[] AnswererUserName ={"Jacob"     ,"Mario"   ,"Tom"      ,"Shon"        ,"Jasmine"     };
    String[] Qusetion =        {"What?"     ,"Where?"  ,"When"     ,"How?"        ,"Who?"        };
    String[] Answer =          {"jjjjjjjjjj","llllllll","fffffffff","eeeeeeeeeeee","oooooooooooo"};

    @Override
    public View onCreateView( LayoutInflater inflater, 
        ViewGroup container,
        Bundle savedInstanceState )
    {


        View view = inflater.inflate(R.layout.frag1, container, false);


        lv = (ListView) view.findViewById(android.R.id.list);

        for (int i = 0;i<4;i++){
            int qid =  i;
            String AUName = AskerUserName[i].toString();
            String AnUName = AnswererUserName[i].toString();
            String Ans = Answer[i].toString();
            String Ques = Qusetion[i].toString();
            Question question = new Question(qid, AUName, AnUName, Ans, Ques);
            questions.add(question);




        }
        QuestionAdapter QuestAd = new QuestionAdapter(getActivity(),questions);
        lv.setAdapter(QuestAd);

        QuestAd.notifyDataSetChanged();




        return view;
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        // TODO Auto-generated method stub
        Intent i = new Intent(getActivity(),QuestionActivity.class);
        i.putStringArrayListExtra("answers", questions.get(position).getAnswers());
        i.putExtra("question", questions.get(position).getQuestion().toString());
        startActivity(i);
        super.onListItemClick(l, v, position, id);  

    }






        // TODO Auto-generated method stub







}

问题活动

public class QuestionActivity extends Activity {
    String Question = "";
    List<String> Answers = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.question_activity);

        Intent i = new Intent(); //This should be getIntent();

        Answers.addAll(i.getStringArrayListExtra("answers"));

        Question = i.getSerializableExtra("question").toString();

        TextView question = (TextView) findViewById(id.questiontxt);
        question.setText(Question);




    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // TODO Auto-generated method stub
        return super.onCreateOptionsMenu(menu);
    }



}

清单

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="code.me"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" android:allowTaskReparenting="false" android:debuggable="true">
        <activity
            android:name="code.me.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

       <activity android:name=".QuestionActivity"/>




    </application>

</manifest>

【问题讨论】:

  • 使用OnItemClickListener

标签: android listview android-intent android-manifest android-adapterview


【解决方案1】:

你可以摆脱lv.setOnItemSelectedListener,因为你正在扩展ListFragment,你应该覆盖onListItemClick

来自文档:

This method will be called when an item in the list is selected. Subclasses should override.  

here你可以找到文档

【讨论】:

  • 谢谢!那行得通,还有一件事;关于意图的任何想法,清单应该是什么样子,知道有一个带有两个碎片的 MainActivity,这是一个
  • @SaleemKhair Manifest 不在乎FragmentsActivity 有多少:)
  • 正如@Droidman 正确所说,Manifest 不关心Fragment
  • @Droidman 我想你的问题错了,我想问的是; Fragment 中的 intent 正在启动 Activity;如何在我的Manifest 中正确定义新的Activity
  • @SaleemKhair 看看here
【解决方案2】:

这里你的类是用 ListFragment 扩展的,所以你需要用 onListItemClick 而不是 OnItemSelectedListener 覆盖 ListView。

更多详情请转至Here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多