单击某个LISTVIEW时导航到不同的页面

时间:2013-10-11 03:15:35

标签: android listview android-listview

我有一个从远程数据库获取值的android项目。我在eclipse中使用listview并循环我的JSON所具有的任何值。这是我的代码:

Newsfeed.java

public class NewsFeed extends ListActivity {

    // Progress Dialog
    private ProgressDialog pDialog;


    private static final String READ_COMMENTS_URL = "http://10.0.2.2/PMR_Drupal/newsfeed.php";

    private static final String TAG_TITLE = "trans_name";
    private static final String TAG_FOR_A = "sub_trans_name";
    private static final String TAG_ACCESS_LEVEL = "ACCESS_LEVEL";

    private JSONArray mComments = null;
    //manages all of our comments in a list.
    private ArrayList<HashMap<String, String>> mCommentList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.newsfeed);   
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu items for use in the action bar
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_activity_actions, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        //loading the comments via AsyncTask
        new LoadComments().execute();
    }

    public void addComment(View v)
    {
        Intent i = new Intent("com.pallet.pts.ADDNEWSFEED");
       startActivity(i);
    }


        public void updateJSONdata() {


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


            JSONParser jParser = new JSONParser();

            JSONObject json = jParser.getJSONFromUrl(READ_COMMENTS_URL);

            try {


                mComments = json.getJSONArray(TAG_POSTS);


                for (int i = 0; i < mComments.length(); i++) {
                    JSONObject c = mComments.getJSONObject(i);


                    String trans_name = c.getString(TAG_TITLE);
                    String sub_trans_name = c.getString(TAG_FOR_A);
                    String ACCESS_LEVEL = c.getString(TAG_ACCESS_LEVEL);

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

                    map.put(TAG_TITLE, trans_name);
                    map.put(TAG_FOR_A, sub_trans_name);
                    map.put(TAG_ACCESS_LEVEL, ACCESS_LEVEL);

                    mCommentList.add(map);

                }

            } catch (JSONException e) {
                e.printStackTrace();
            }
        }


            private void updateList() {

                ListAdapter adapter = new SimpleAdapter(this, mCommentList,
                        R.layout.single_post, new String[] { TAG_TITLE, TAG_FOR_A, TAG_ACCESS_LEVEL}, new int[] { R.id.title, R.id.forApproval, R.id.count});


                setListAdapter(adapter);


                ListView lv = getListView();    
                lv.setOnItemClickListener(new OnItemClickListener() {

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


                         Intent intent = new Intent("com.pallet.pts.NEWSFEED_CLICKED");
                            intent.putExtra("position", position);
                            startActivity(intent);

                    }
                });
            } 

    public class LoadComments extends AsyncTask<Void, Void, Boolean> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pDialog = new ProgressDialog(NewsFeed.this);
            pDialog.setMessage("Checking for Updates...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();
        }
        @Override
        protected Boolean doInBackground(Void... arg0) {
            //we will develop this method in version 2
            updateJSONdata();
            return null;

        }


        @Override
        protected void onPostExecute(Boolean result) {
            super.onPostExecute(result);
            pDialog.dismiss();
          //we will develop this method in version 2
            updateList();
        }
    }
}

现在问题是,由于列表视图正在循环播放,如何为每行创建一个包含不同内容的列表视图屏幕?

提前谢谢! :d

2 个答案:

答案 0 :(得分:0)

您需要创建一个活动,该活动应该由ListView调用blue print for all the activity。您需要将一些值附加到Intent,您将传递给活动并基于此剩余组件可以创建动态。你做的方式会因为数据来自远程数据库而变得困难,因为数据可能会不时变化。但我要说的是制作一个基本的skeleton of Activity,因为大多数组件只保留一些组件只能更改您可以根据意图值动态添加的组件

答案 1 :(得分:0)

你好@Shakeeb Shaheen在这里评论我试图为你写一个伪代码。首先创建一个xml布局,并将其命名为common_layout.xml,用于显示trans和subtrans名称。以下是此布局的代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/tv_trans_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/tv_subtrans_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

创建用于保存此布局的活动。 现在,从NewsFeed活动中,您必须在用户单击每个列表项时传递trans name和subtrans name值。你可以这样做

Intent intent = new Intent(NewsFeed.this, CommonActivity.class);
intent.putExtra("TRANS_NAME", trans_name);
intent.putExtra("SUBTRANS_NAME", subtrans_name);
startActivity(intent);

然后你必须在公共活动类中获取这些值。这篇文章也可以帮助你how to pass value between two activity