2014-06-20 58 views
2

我有一个自定义列表视图适配器。我想包括setontemclicklistener禁用列表视图中的listitem。 我试过使用onitemclicklistener,但它不起作用,你能帮我吗?如何在ANDROID自定义列表视图适配器中使用setonitemclicklistener

首页类:

public class Home extends Activity { 

JSONObject jsonobject; 
JSONArray jsonarray; 
ListView listview; 
ListViewAdapter adapter; 

SharedPreferences pref; 
String uid; 
static String user_id,us; 
ArrayList<HashMap<String, String>> arraylist; 

//static String BET_ID = "bet_id"; 
static String QUESTION = "question"; 
static String QUES_ID = "ques_id"; 



@SuppressLint("NewApi") 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    pref = PreferenceManager.getDefaultSharedPreferences(this); 
    setContentView(R.layout.questionlist); 

uid = pref.getString("user_id",null); 
Log.d("uid", ""+uid); 



    new DownloadJSON().execute(); 
} 


private class DownloadJSON extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... params) { 


     arraylist = new ArrayList<HashMap<String, String>>(); 

     jsonobject = JSONfunctions 
       .getJSONfromURL("http://192.168.1.23/MutilatedPHP/QuizGame/quesdownloadjson.php"); 

     try { 

      jsonarray = jsonobject.getJSONArray("ques"); 

      for (int i = 0; i < jsonarray.length(); i++) { 
       HashMap<String, String> map = new HashMap<String, String>(); 
       jsonobject = jsonarray.getJSONObject(i); 


       map.put("question", jsonobject.getString("question")); 
       map.put("ques_id", jsonobject.getString("ques_id"));  



       arraylist.add(map); 
      } 
     } catch (JSONException e) { 
      Log.e("Error", e.getMessage()); 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void args) { 

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

     adapter = new ListViewAdapter(Home.this, arraylist); 

     listview.setAdapter(adapter); 


    } 
} 
} 

ListviewAdapter:

public class ListViewAdapter extends BaseAdapter { 

Context context; 
LayoutInflater inflater; 
ArrayList<HashMap<String, String>> data; 



HashMap<String, String> resultp = new HashMap<String, String>(); 

public ListViewAdapter(Context context, 
     ArrayList<HashMap<String, String>> arraylist) { 
    this.context = context; 
    data = arraylist; 

} 

@Override 
public int getCount() { 
    return data.size(); 

} 

@Override 
public Object getItem(int position) { 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return 0; 
} 

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

    TextView qs1; 
    TextView qs2; 


    View v = convertView; 

    if (v == null) { 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = inflater.inflate(R.layout.listitem, null); 
    } 



    resultp = data.get(position); 


    qs2 = (TextView) v.findViewById(R.id.qs); 



    qs2.setText(resultp.get(Home.QUESTION)); 





    v.setOnClickListener(new OnClickListener() { 


     @Override 
     public void onClick(View arg0) { 



      resultp = data.get(position); 


      Intent intent = new Intent(context, SingleItemView.class); 


      intent.putExtra("question", resultp.get(Home.QUESTION)); 
      intent.putExtra("ques_id", resultp.get(Home.QUES_ID)); 



      context.startActivity(intent); 


     } 

    }); 

    return v; 

} 



} 

预先感谢您

+0

你能发表一些代码吗?你如何禁用你的物品?你如何设置听众? – Marius

+0

将您的代码与listview xml文件一起发布。 –

+2

当你点击listitem时你会发生什么'v.setOnClickListener'。它不需要'SingleItemView.java'吗? – Raghunandan

回答

1

试试这个

listView.setOnItemClickListener(); 

@Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, 
      long id) { 
     //Use your code here 
    } 
+1

应该在适配器类中使用吗? –

+0

没有使用setAdaptor()的MainActivity.java。 –

1

试试这个!

在你MainActivity形式,其中适配器类被称为添加这样的:

listView1.setOnItemClickListener(new OnItemClickListener() { 

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

      // ListView Clicked item index 
      int itemPosition  = position; 


     } 
    }); 
+0

你的意思是''Home'类中的'protected void onPostExecute(void args)'? –

+1

号,并且这不是compoulsory,您需要在Async任务类中设置Adapter calss。您可以在您的Async任务类的onPostExecute()函数中将列表视图设置为可见。并调用listView1.setAdapter(adapter); new Task()。execute(); ()方法 –

+0

酷,但我如何在这里添加项目位置 –

1

内部在创建时使用这种方法

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

    listview.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> a, View v, int position, 
       long id) { 
      Object o = listview.getItemAtPosition(position); 

     } 
    }); 
2

你只是简单的需要调用OnItemClickListener的ListView控件。

listview.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> a, View v, int position, 
      long id) { 


    } 
}); 
相关问题