161.n1-解析json中的数据传递给左边的侧边栏

本文介绍了一种通过MainActivity作为中介,在左侧边栏和ViewPager组件间传递数据的方法。主要涉及如何从服务器获取数据并将其展示在侧边栏中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

左侧边栏和ViewPager中的额news没有什么交互,如果要传递数据可以通过MainActivity作为中介来传递数据,首先MainActivity要获取到左侧边栏的对象,

	//获取到左侧边栏的对象,娶一个别名
	public LeftMenuFragment getLeftMenuFragment(){
		FragmentManager fm = getSupportFragmentManager();
		LeftMenuFragment leftMenuFragment = (LeftMenuFragment) fm.findFragmentByTag(FRAGMENT_LEFT_MENU);
		
		return leftMenuFragment;
		
	}

然后newPager创建MainActivity对象获取到左侧边栏的对象,然后之前解析的数据传递给左侧边栏

/ 刷新测边栏的数据,利用MainActivity获取到左侧边栏的数据
		MainActivity mainUi = (MainActivity) mActivity;
		//获取到左侧边栏的对象
		LeftMenuFragment leftMenuFragment = mainUi.getLeftMenuFragment();
		//设置网络数据
		leftMenuFragment.setMenuData(mNewsData);

MainActivity.java逻辑文件,创建方法获取到左侧边栏的对象

package com.ldw.news;

import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.Window;

import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity;
import com.ldw.news.fragment.ContentFragment;
import com.ldw.news.fragment.LeftMenuFragment;

/*
 * 主界面
 */
public class MainActivity extends SlidingFragmentActivity {

	private static final String FRAGMENT_LEFT_MENU = "fragment_left_menu";
	private static final String FRAGMENT_CONTENT = "fragment_content";
	@Override
	public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        
        initView();
	}

	private void initView() {
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);
        
		
		//设置左侧边栏
        setBehindContentView(R.layout.left_menu);
        //获取侧边栏对象
        SlidingMenu slidingMenu = getSlidingMenu();
        //设置全屏触摸
        slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        //设置预留屏幕的宽度
        slidingMenu.setBehindOffset(200);
        
        initFragment();
        
		
	}
	
	/*
	 * 初始化fragment,将fragment填充给布局文件
	 */
	private void initFragment() {
		FragmentManager fm = getSupportFragmentManager();
		FragmentTransaction transaction = fm.beginTransaction();// 开启事务
		//左侧边栏用布局替代(填充)
		//第三个参数就是给fragment取一个名字,可以使用fm.findFragmentByTag(FRAGMENT_LEFT_MENU);
		transaction.replace(R.id.fl_left_menu, new LeftMenuFragment(),
				FRAGMENT_LEFT_MENU);// 用fragment替换framelayout
		//内容的填充
		transaction.replace(R.id.fl_content, new ContentFragment(),
				FRAGMENT_CONTENT);

		transaction.commit();// 提交事务
		//使用第三个参数
		// Fragment leftMenuFragment = fm.findFragmentByTag(FRAGMENT_LEFT_MENU);
	}
	
	//获取到左侧边栏的对象,娶一个别名
	public LeftMenuFragment getLeftMenuFragment(){
		FragmentManager fm = getSupportFragmentManager();
		LeftMenuFragment leftMenuFragment = (LeftMenuFragment) fm.findFragmentByTag(FRAGMENT_LEFT_MENU);
		
		return leftMenuFragment;
		
	}

}

左侧边栏的布局,是一个ListView.fragmen_left_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    android:orientation="vertical" >
    
	<!-- 侧边栏 -->
	<ListView 
	    android:id="@+id/lv_list"
	    android:layout_width="match_parent"
    	android:layout_height="wrap_content"
	    />
</LinearLayout>

左侧边栏的单个条目

list_menu_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
	<!-- 左侧菜单单个条目的布局 -->
	<TextView 
	    android:id="@+id/tv_title"
	    android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
    	android:textColor="#ff0000"
    	android:textSize="22sp"
    	android:text="新闻"
    	android:layout_gravity="center"
    	android:drawablePadding="5dp"
    	android:drawableLeft="@drawable/menu_arr_select"
	    />
</LinearLayout>

左侧边栏的逻辑文件LeftMenuFragment.java

package com.ldw.news.fragment;

import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.ldw.news.R;
import com.ldw.news.domain.NewsData;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.view.annotation.ViewInject;

/*
 * 左侧边栏的内容
 */
public class LeftMenuFragment extends BaseFragment{
	@ViewInject(R.id.lv_list)
	private ListView lv_list;
	//初始化布局
	@Override
	public View initViews() {
		View view = View.inflate(mActivity, R.layout.fragment_left_menu, null);
		ViewUtils.inject(this, view);
		return view;
	}
	
	public void initData(){
		
	}
	
	//设置网络数据
	public void setMenuData(NewsData data){
		System.out.println("左侧的数据是:" + data);
	}
	
	class MenuAdapter extends BaseAdapter{

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return 0;
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return null;
		}

		@Override
		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			View view = View.inflate(mActivity, R.layout.list_menu_item, null);
			TextView tv_title = (TextView)view.findViewById(R.id.tv_title);	
			return view;
		}
		
	}

}

news的pager先解析数据然后吧数据传递给左边的菜单栏NewsCenterPager.java

package com.ldw.news.base.impl;

import android.app.Activity;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;
import com.ldw.news.MainActivity;
import com.ldw.news.base.BasePager;
import com.ldw.news.domain.NewsData;
import com.ldw.news.fragment.LeftMenuFragment;
import com.ldw.news.global.ClobalContants;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;

/**
 * 新闻中心
 * 
 * @author Kevin
 * 
 */
public class NewsCenterPager extends BasePager {

	//private ArrayList<BaseMenuDetailPager> mPagers;// 4个菜单详情页的集合
	private NewsData mNewsData;
	
	public NewsCenterPager(Activity activity) {
		super(activity);
	}

	@Override
	public void initData() {
		System.out.println("初始化设置数据....");
		
		tvTitle.setText("设置");
		btnMenu.setVisibility(View.GONE);// 隐藏菜单按钮
		setSlidingMenuEnable(false);// 关闭侧边栏

		TextView text = new TextView(mActivity);
		text.setText("设置");
		text.setTextColor(Color.RED);
		text.setTextSize(25);
		text.setGravity(Gravity.CENTER);

		// 向FrameLayout中动态添加布局
		flContent.addView(text);
		//从服务器中获取数据
		getDataFromServer();
	}
	
	/*
	 * 从服务器中获取数据,使用xUtils实现
	 */
	private void getDataFromServer(){
		HttpUtils utils = new HttpUtils();
		//参数是String获取到的是String
		utils.send(HttpMethod.GET, ClobalContants.CATEGORIES_URL, new RequestCallBack<String>(){

			@Override
			public void onSuccess(ResponseInfo<String> responseInfo) {
				//获取到返回的结果
				String result = (String) responseInfo.result;
				System.out.println("返回结果:" + result);

				parseData(result);
				
			}

			//访问失败
			@Override
			public void onFailure(HttpException error, String msg) {
				Toast.makeText(mActivity, msg, Toast.LENGTH_SHORT)
				.show();
				//打印错误信息
				error.printStackTrace();
				
			}
			
		});
	}
	
	/*
	 * 解析网络数据
	 */
	protected void parseData(String result) {
		//使用Gson解析
		Gson gson = new Gson();
		//第一个参数是数据,第二个参数是要转化成什么对象
		mNewsData = gson.fromJson(result, NewsData.class);
		System.out.println("解析结果:" + mNewsData);
		
		// 刷新测边栏的数据,利用MainActivity获取到左侧边栏的数据
		MainActivity mainUi = (MainActivity) mActivity;
		//获取到左侧边栏的对象
		LeftMenuFragment leftMenuFragment = mainUi.getLeftMenuFragment();
		//设置网络数据
		leftMenuFragment.setMenuData(mNewsData);
	}

}

Json解析的数据NewsData.java

package com.ldw.news.domain;

import java.util.ArrayList;

/*
 * 网络分类信息的封装
 * 各个字段的名名字需要一直,方便Gson解析
 */
public class NewsData {

	public int retcode;//返回值
	public ArrayList<NewsMenuData> data;//字段数据
	
	//data下面又有一组4个数据
	// 侧边栏数据对象
	public class NewsMenuData {
		public String id;
		public String title;
		public int type;
		public String url;
		//解析children的数据
		public ArrayList<NewsTabData> children;

		@Override
		public String toString() {
			return "NewsMenuData [title=" + title + ", children=" + children
					+ "]";
			}
		}
		
		// 新闻页面下11个子页签的数据对象
		public class NewsTabData {
			public String id;
			public String title;
			public int type;
			public String url;

			@Override
			public String toString() {
				return "NewsTabData [title=" + title + "]";
			}
		}

		@Override
		public String toString() {
			return "NewsData [data=" + data + "]";
		}
}


<think>好的,我现在需要帮助用户解决如何在编程中定义整型变量并进行加减乘除及取模运算的问题。用户还提供了示例数值n1=22和n2=64,我需要用具体的代码示例来说明。 首先,我得确定用户使用的是哪种编程语言,但问题中没有明确说明。考虑到常见性,可能需要选择几种主流语言来展示,比如Python、Java、C++等。不过用户之前的引用里提到了Python(比如快速排序的例子)和Java(Integer类的拆箱装箱),所以可能需要覆盖这两种语言,或者至少选择其中一种作为示例。 但用户的问题可能希望得到一个通用的回答,或者以某种特定语言为例。根据示例中的Python代码,可能用户更倾向于Python,所以先考虑用Python来展示。不过为了全面,可能需要多语言对比,或者明确说明不同语言的差异。 接下来,我需要回顾整型变量的定义和基本运算。在Python中,定义变量很简单,直接赋值即可,如n1 = 22。而其他语言如Java或C++需要声明类型,比如int n1 = 22;。加减乘除和取模运算符在大多数语言中是相同的,即+、-、*、/、%。 需要注意不同语言中整数除法的处理方式。例如,在Python中,使用/会得到浮点数结果,而//才是整除;而Java和C++中,两个整数相除会直接截断为整数。因此,在示例代码中需要说明这一点,特别是当用户可能跨语言时。 另外,取模运算在不同语言中对负数的处理可能不同,但用户给出的例子是正数,可能暂时不需要深入讨论这一点。 现在,结构应该是:先说明如何定义整型变量,然后分别展示加减乘除和取模运算,并提供示例代码。同时,可能需要指出各运算的注意事项,如除法结果类型、取模的应用场景等。 还需要考虑用户可能的后续问题,比如运算中的类型转换、溢出处理等,但当前问题只需要基础操作,所以暂时不需要深入。 然后,需要生成相关问题。可能的包括不同语言中的差异,处理除法时的注意事项,取模运算的特殊情况,或者变量声明的作用域等。 现在,整理步骤: 1. 定义整型变量:在不同语言中的语法。 2. 加法运算。 3. 减法运算。 4. 乘法运算。 5. 除法运算(注意整除和浮点结果)。 6. 取模运算。 7. 示例代码,使用用户提供的n1=22和n2=64。 8. 注意事项或常见问题。 在示例代码部分,用Python的话可以直接赋值并进行运算,比如: n1 = 22 n2 = 64 print(n1 + n2) # 加法 print(n1 - n2) # 减法 # 等等 但如果是Java的话,需要声明变量类型,比如: int n1 = 22; int n2 = 64; System.out.println(n1 + n2); 不过用户的问题可能希望用Python,因为之前的示例是Python代码,所以优先使用Python示例。但需要确认是否要包含其他语言,比如用户引用的引用[2]提到了Java的拆箱装箱,所以可能用户对Java也感兴趣,但问题中的示例是Python的。这时候可能需要分开说明,或者选择一种主要语言。 可能用户的问题更偏向于通用实现,但需要具体代码示例,所以可能需要用两种语言来展示,或者先以Python为例,再提及其他语言的差异。 现在,根据用户提供的引用,引用[2]是关于Java的拆箱装箱,而引用[3]是关于C++的共用体,所以用户可能有兴趣了解不同语言的实现方式。但用户的问题直接要求示例代码,而示例中的n1和n2是Python的写法,所以可能需要以Python为主,但补充其他语言的信息。 因此,在回答中,可以先用Python示例,然后在注意事项中提到其他语言的差异,比如变量声明需要类型,或者除法运算的不同处理方式。 例如,在Python中: n1 = 22 n2 = 64 sum = n1 + n2 difference = n1 - n2 product = n1 * n2 quotient = n2 / n1 # 结果为浮点数 integer_division = n2 // n1 # 整除 modulus = n2 % n1 但在Java中: int n1 = 22; int n2 = 64; int sum = n1 + n2; int difference = n1 - n2; int product = n1 * n2; int quotient = n2 / n1; // 自动截断为整数 int modulus = n2 % n1; 因此,在回答中需要指出这些差异,特别是在除法运算中的不同行为,避免用户混淆。 另外,取模运算的结果符号在不同语言中的处理方式可能不同,但用户示例中的数值都是正数,可能暂时不需要深入讨论。 现在,整合这些信息,形成结构清晰的回答: 1. 定义整型变量:以Python为例,直接赋值;其他语言可能需要类型声明。 2. 逐一介绍加减乘除和取模运算,给出Python示例代码。 3. 提及其他语言(如Java、C++)的关键差异,特别是在除法运算中的处理。 4. 示例使用用户提供的n1=22和n2=64,计算结果并展示。 5. 注意事项,如运算中的类型转换、整数溢出(在静态类型语言中可能存在的问题)等。 6. 生成相关问题,比如不同语言的差异、处理除法的方式、取模的应用等。 在代码示例中,Python的整除和浮点除法的区别需要说明,比如: 当使用/时,得到的是浮点数结果(如64/22=2.909...),而//会得到整除的结果(64//22=2)。而取模运算64%22的结果是20,因为22*2=44,64-44=20。 然后,在Java中,64/22的结果是2,因为两个整数相除会自动截断小数部分,而取模的结果也是20。 因此,在回答中需要强调这些点,确保用户了解不同语言中的行为。 最后,生成相关问题,例如: 1. 不同编程语言中整数除法的处理方式有何不同? 2. 如何处理大整数运算以避免溢出? 3. 取模运算在编程中有哪些常见应用场景?</think>### 定义整型变量及基本运算实现 在编程中,整型变量用于存储整数值。不同语言定义方式略有差异,但核心逻辑相似。以下以 **Python** 为例说明基本操作: #### 1. 定义整型变量 ```python n1 = 22 # 直接赋值整数值 n2 = 64 ``` #### 2. 加减乘除及取模运算 ```python # 加法 sum = n1 + n2 # 22 + 64 = 86 # 减法 difference = n2 - n1 # 64 - 22 = 42 # 乘法 product = n1 * n2 # 22 * 64 = 1408 # 除法(结果为浮点数) quotient_float = n2 / n1 # 64 / 22 ≈ 2.909 # 整除(结果向下取整) quotient_int = n2 // n1 # 64 // 22 = 2 # 取模(余数) modulus = n2 % n1 # 64 % 22 = 20 ``` #### 3. 其他语言注意事项 - **Java/C++**:需显式声明变量类型,如 `int n1 = 22;`,整数除法直接截断小数部分[^2]。 - **类型转换**:混合运算时可能涉及隐式类型提升,如 `int + float` 结果为 `float`。 #### 4. 示例代码运行结果 ```python print("加法:", sum) # 86 print("减法:", difference) # 42 print("乘法:", product) # 1408 print("浮点除法:", quotient_float) # 2.909... print("整数除法:", quotient_int) # 2 print("取模:", modulus) # 20 ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值